Система адресации
Взято отсюда https://gitlab.com/tehnokom/universo-kvazaro/-/issues/30#note_465096650
-
У сущностей верхнего уровня, к которым относится типа профили Пользователей и Сообществ, у нас ссылка на главную страницу состоит из 3 букв и цифры ID этой сущности.
Получается:
-
idu
- пользователи (uzantoj), например /idu13 (мой профиль). -
idk
- сообщества (komunumoj), например /idk739 (Рабочий Фронт Латвии) - Так же запланировано, например
ido
- организации и т.д.
-
-
А у главных страниц сущностей второго уровня, но которые всё равно важные, к которым относится вот обсуждаемые нами Проекты, а также, например Конференции, у нас ссылка состоит из 4 букв и цифры ID этой сущности.
Для коференций мы сделали буквенный префикс
konf
, например /konf41 - это главная страница конференции сообщества "Новости космоса". Для функционала проектов нужно выбрать какие-то 4 буквы, вроде логичным кажется использование опорных согласныхprkt
, но нужно подумать. Кроме того важно понимать, что это ссылка на главную страницу раздела, а есть ещё ссылки на конкретную сущность второго уровня, на тот же проект. Об этом напишу дальше.
=========================================
Поскольку функционал конференций мы раньше, в прежних веб-интерфейсах, реализовывали только тестово, полноценно он не работал, сейчас можно доработать систему ссылок, не боясь что ссылки на конференции изменятся.
Я могу предложить такой подход:
У главных страниц сущностей первого и второго уровня (а может и третьего уровня, нужно подумать отдельно) в начале всегда чтобы было id, потом буквенный префикс сущности, потом цифры цифры ID этой сущности. Только у сущности первого уровня буквенный префикс 1 символ, а сущностей второго уровня буквенный префикс 2 символа.
Получается тогда, что у тех же самых пользователей и сообществ останется как было, а у второго уровня будет как-то вот так:
-
idkf
- у главных страниц Конференций, например, /idkf41 станет ссылка у главной страницы конференции сообщества "Новости космоса". -
idpr
- у главных страниц Проектов, например, /idpr13, будет ссылка у главной страницы проектов сообщества "Развитие Технокома".
Тут сразу возникает вопрос, о том, что раз мы собираемся делать функционал проектов и у пользователей, то может быть пересечение по ID у пользователя и у сообщества. Например, у пользователя Владимир Левадный ID пользователя 13 и у Развитие Технокома ID сообщества тоже 13. Но это не противоречит нашим текущим дальнейшим планам, придти к тому, что пользователь как сущность будет очень изолирована от внешнего мира, ну то есть раньше мы реализовывали функционал таким образом, как это обычно делается в других местах, в том числе во ВКонтакте и Фейсбуке, типа что у пользователя сразу есть функционал аналогичный функционалу сообщества, типа стены, фотографий, видео и всё такое.
Но по мере проработки нашего функционала, в том числе реализации на основе нашего движка внешних систем автоматизации, в том числе ERP систем мы столкнулись с перечнем вопросов, что может не хватать гибкости, или приходится добавлять разные частично дублирующие сущности. Например, в рамках ERP системы, которую мы в Универсо тоже будем реализовывать нужно иметь возможность создавать разные контакты, в том числе людей у которых пока нет учётной записи пользователей. Не углубляясь сейчас в тонкости, скажу что для этого мы создавали разные обходные дополнительные сущности, связывали их по разному и так далее.
А так, прорабатывая нашу архитектуру, продумывая как же нам сделать так, чтобы объединить в одном удобном месте все форматы социальных сервисов, в том числе и аналог Твиттера с микросообщениями, и аналог Инстаграма с упором на фотографии, я придумал различные подходы, начиная с переключения вариантов пользовательских интерфейсов на разный фокус, в разный режим, ну то есть, чтобы можно было видео в первую очередь видео в интерфейсе, который удобнее для этого типа как в Ютьюбе, или по другом. А так же варианты с типами сообществ и видами публикуемых записей.
В продолжение абзаца выше, так же мы ставим важным нашим приоритетом эффективность действий, минимизацию "потребления времени жизни" людей на использование нашего сервиса. А для этого, нужно в том числе избегать ситуаций дублирования использования функционала пользователя и функционала сообщества, в той её части, которая касается воздействия на других людей. Ну то есть в обычных социальных сервисах часто случаются такие ситуации, когда человек прокачивает свою личную страницу, добавляет максимальное количество друзей, дальше могут быть только подписчики и появляются другие ограничения по сравнению с сообществом, человек создаёт своё Сообщество начинает туда делать репосты своих старых личных сообщений, начинает потом из сообщества делать репосты себе на личную страницу и т.д. Это всё "забивает ленту" у его подписчиков. Социальные сервисы начинают с этим бороться, анализируя дубли и блокируя их вывод в ленту, во-первых: тратя на это дополнительные ресурсы, во-вторых: это всё равно не помогает тем людям, которые сами заходят туда и сюда, и видят там дублирую информацию.
Вот проблемы описанные выше и перечень других проблем я понял что лучшим образом решаются таким подходом, что пользователь становится довольно внутренней сущностью, а взаимодействует с внешним миром он, например, через личные сообщества, тип и вид, которых можно будет поменять ни как не воздействуя при этом на профиль пользователя. Ну то есть, например, у пользователя не будет своей стены пользователя, будет сообщество, которое пользователь создал и связал как личное сообщество, там будет весь нужный функционал.
Кроме выше названного "личного сообщества", которое у нас будет по другому по всей видимости называться (сейчас не будем это обсуждать), будет ещё, назовём его сейчас "системное личное сообщество", это как раз на самом деле личное, приватное сообщество, которое пользователь может как сообщество не будет воспринимать, тут речь скорее о логике. Ну то есть, чтобы пользователь получил весь функционал из сообществ, чтобы не получалось как у нас сейчас, или дублирование логики, или излишне сложная логика, которую сложно администрировать, каждому пользователю, который захочет иметь нужный функционал будет создаваться связанное системное личное сообщество.
У функционала системного личного сообщества ссылка будет по ID пользователя только перед ним будет ещё ноль. Ну по крайней мере я подумал это самым лучшим подходом. То есть ссылка на главную страницу функционала проектов у сообщества "Развитие Технокома" будет /idpr13, а у моих приватных проектов /idpr013.
Так же у нас всё это касается организаций, которых касается многое из того, что написано про пользователей. Применяя тот же подход, для организаций с личным ID13 можно будет создать системное личное сообщество и в ссылке использовать префикс в виде двух нулей, то есть у функционала проектов будет ссылка /idpr0013.
====================
Выше мы определились с тем какая ссылка будет у главной страницы раздела проектов в сообществе, получается типа /idpr13, то есть буквенный префикс idpr плюс ID сообщества.
Теперь получается, что написанный мной выше варианты использования prkt
можно использовать уже для страницы конкретного проекта.
@avathar (Павел), вот как раз ты выше успел уже спросить, я хотел тут про это написать, что у проектов и задач сейчас в текущей реализации нет поля ID, которое через АПИ ObjId, но после того как @VasMih (Василий) сделает отдельное джанго-приложение universo_projektoj
, то в нём потом добавит в модели поля ID в проекты и задачи.
Тогда получится что у проектов будет сквозная нумерация ID по всем проектам вне зависимости от того к какому сообществу на текущий момент они относятся, так как, повторюсь, проекты будут довольно динамичными и будет возможность перепривязки к другому сообществу.
То есть ссылки будут типа /prkt41 где 41 - это именно ID проекта, не ID сообщества.
А у задач будет сквозная нумерация ID в рамках того проекта к которому они относятся, полного переноса задачи в другой проект не предполагается, потому что подразумевается что задача связанна с конкретным проектом, но будет возможность скопировать задачу в другой проект.
То есть ссылки будут типа /prkt41-67 или /prkt41-t67, где 67 - это ID задачи уникальное в рамках конкретного проекта. Раньше мы ставили в составную ссылку буквы чтобы показать что это ID категории, проекта, задачи. Но нужно получить ссылку как можно короче, поэтому наверное не нужно лишних букв.
===================================