!!! Как организовать структуру сложного проекта?

Обсуждаем, как правильно строить приложения
Ответить
Аватара пользователя
myks1992@mail.ru
Сообщения: 64
Зарегистрирован: 2017.11.15, 23:54

!!! Как организовать структуру сложного проекта?

Сообщение myks1992@mail.ru » 2019.02.19, 02:51

Всем привет! Начал проектировать сложный проект. Прошу помощи совета, чтобы в будущем не пришлось все перестраивать и ломать.

Сначала начал думать как организовать несколько профилей:
1. Профиль танцора.
2. Профиль тренера танцоров.
3. Профиль администратора студии.
4. Профиль руководителя студии.
5. Профиль судьи.
6. Профиль организатора мероприятий.

Разработка будет на Yii используя модульную структуру.

Первое, что в голову пришло - это повесить все на две Таблицы user и profile, так как различие между профилями будет не большое. В 1-4 поля. Далее сценариями Yii и Моделями Форм осуществлять работу с этими таблицами. Все это будет объединено в одном модуле user. Разделение профилей осуществляется по полю role.

Второе, что пришло в голову это использовать под каждый профиль отдельную таблицу dancer, judge, admin... Но использовать одну таблицу user где будет хранится информация с логинами и паролями. Здесь можно попробовать вынести отдельные модули на танцора, судью, админа... Однако при этом будет слабая связь с модулем user.

Третье - это полностью самодостаточные модули со своими данными авторизации.

Мне кажется, что удобнее проектировать все в одном модуле, как описано в первом случае. Однако, подумав ещё понял, что сам проект, скорее всего, будет разнесен на несколько приложений, что, скорее всего, будет иметь разные базы данных:

1. Студия танцев (функционал по работе со студией, в основном с сайтом, рейтингом. Учет будет в отдельной CRM системой)
2. Организация мероприятий (функционал по работе с мероприятиями: назначения судей, регистрация участников как из студии так и других, управление регистрацией...)
3. Приложение для работы на мероприятии (счетная)

Все данные профилей использоваться и пересекаться не только с модулями внутри приложения, но и между приложениями. Вижу в этом один способ — через api.

Но ещё хотелось бы данные авторизации: логин, пароль, токен хранить в одном месте...

Понимаю, проект сложный. Возможно придётся подключить других разработчиков Yii, но начинать буду один, возможно, после выхода Yii3. А сейчас важно заложить правильный путь и начать разрабатывать малоотвественные модули.

Если все пойдёт хорошо, то в системе будет от 100 000 человек. Но начнём с малого.

Так же планируется интеграция с действующей CRM системой имеющая уже 200 школ Россиии СНГ, которую использую сам. И одной из самых больших организаций в России. Сейчас уже есть действующая версия по работе с судьями России на базе этой организации реализованная мной.

Теперь самый непонятные для меня вопросы это: Как все связать? Как правильно выстроить? Как устраивать взаимосвязи между данными? Какую структуру использовать? В общем таких вопросом пока много.

Если не вдаваться в подробности, то структуру проекта вижу так:
1. Управление студией (админка, фронт)
- модуль пользователей
- подключаемый модуль рейтингов
- дополнительный модуль для своих нужд.

2. Организация мероприятий (админка, фронт)
- модуль пользователей
- модуль мероприятий
- модуль аттестации судей
- модуль рейтинга

3. Счетная система (админка)
По модульности не думал, скорее всего просто будет принимать данные и считать. На первом этапе возможно будет интегрирована с действующей программой.

Админка и фронт будут внедряться в сам модуль:
Controllers
Backend
Frontend
....
Module.php

Ещё один нюанс, что модули возможно придётся менять со временем или от разных проектов. То есть все модули должны быть менее зависимы. Тут я думаю использовать DI + интерфейсы

Возможно, что не сможете помочь из-за большого непонимания деталей, но буду рад абсолютно любому высказыванию, наставлениями и советам по теме))

P.S. Если вопрос требует других тегов тостера или вы считаете его не правильно написанном - прошу предлагать правки вопроса. Если я что-то не понятно описал, пожалуйста, задайте свои уточняющие вопросы в комментариях.
Последний раз редактировалось myks1992@mail.ru 2019.02.19, 16:33, всего редактировалось 1 раз.

someweb
Сообщения: 528
Зарегистрирован: 2017.03.09, 10:12

Re: Как организовать структуру сложного проекта?

Сообщение someweb » 2019.02.19, 08:59

Предметную область хорошо знаете? Там не все так просто... Или вы из ФТСАРР?
Уж точно не надо начинать с проектирования БД.
Чтобы правильно задать вопрос, нужно знать бо́льшую часть ответа. Роберт Шекли.

Аватара пользователя
myks1992@mail.ru
Сообщения: 64
Зарегистрирован: 2017.11.15, 23:54

Re: Как организовать структуру сложного проекта?

Сообщение myks1992@mail.ru » 2019.02.19, 14:13

someweb писал(а):
2019.02.19, 08:59
Предметную область хорошо знаете? Там не все так просто... Или вы из ФТСАРР?
Уж точно не надо начинать с проектирования БД.
Относительно) Code-First в основном больше видел, чем использовал...

На Yii это вообще уместно создание такого проекта с его связанностью?)

Нет, я не из ФТСАРР. У них не плохая система, но не все устраивает. Одно время хотел использовать их программу. Молодцы ребята! Но решил углубиться в своё.

Проектирование от БД просто быстрее. Большинство все от этого идут) Скорее всего придётся тоже так делать. Но посмотрим.

Пока только все обдумываю. Собираю информацию. Не сходится, например, то, что модуль это самостоятельная независимая единица. А в моем случае так не получается никак. Либо модули будут избыточными, а между ними придётся делать синхронизацию. Я пока думаю что нужно зависимости через абстракцию делать.

DDR5
Сообщения: 7
Зарегистрирован: 2019.01.09, 14:20

Re: !!! Как организовать структуру сложного проекта?

Сообщение DDR5 » 2019.02.27, 13:37

очень сложный проект ^^ ))))))

uEhlO4a
Сообщения: 45
Зарегистрирован: 2017.08.12, 19:19

Re: !!! Как организовать структуру сложного проекта?

Сообщение uEhlO4a » 2019.02.28, 01:09

зачем тебе модули? ты их продавать будешь?
я делал несколько приложений с общим кодом, по типу advanced template (правда там шаблон трешак и нужно самому добавлять DotEnv поддержку самому)

из того, что вижу
2 приложения - front, admin (Gii+adminLTE или что-то такое)
в приложении front можно разместить модулем api, либо 3 приложение api
все твои модули это просто папки в контроллере, типа
controllers/users/..
controllers/events/..
controllers/judges/...
controllers/ratings/...
какую-то папку в models/forms , где будут формы , типа front/models/forms
для админки это будет admin/models/forms
общие модели будут в common/models и т.д.
логику можешь сделать в моделях либо вынести, если будет много логики, например по компонентам (как в DDD)

и я бы профиль сделал 1 полем JSON и назвал бы "profile", ха-ха


а так дело твое что делать, я гарантий никаких не представляю, хе

п.с.
@someweb о! свидетель CodeFirst детектед.. ты сам хоть раз в жизни закончил такой проект от начала и до конца? вы после 3х месяцев своего ООП говнокода сваливаете с проекта и потом клиент в ах..е через полгода прибегает и просит чтобы оно заработало как можно быстрее, т.к. он хотел запустить его 3 месяца назад, а в итоге у него мега независимый кусок говна неспособное ни на что, а не приложение.

anton_z
Сообщения: 378
Зарегистрирован: 2017.01.15, 15:01

Re: Как организовать структуру сложного проекта?

Сообщение anton_z » 2019.02.28, 09:57

someweb писал(а):
2019.02.19, 08:59
Уж точно не надо начинать с проектирования БД.
Не соглашусь. Чем это обосновано? Полно приложений и побольше, где все начиналось с БД, живет и работает прекрасно. Методология, проверенная годами.

Я соглашусь с ответом выше. Ничего советовать не буду, но если бы я делал что-то подобное, модульность была бы мне не нужна, для меня на начальных стадиях это был бы лишний головняк - продумать что в какой модуль вставить, как модули изолировать. Если понадобится потом что-то перенести в другой проект, я бы выделил модуль из уже работающей системы. Я бы предпочел получить работающее монолитное приложение, чем увязнуть в выделении модулей, которое может и не понадобится. Я бы лучше время. что уйдет на модульность потратил бы на автотесты. Вы для себя ответили на вопрос, зачем вам модули? Решать, конечно же, вам.

CodeFirst мне бы тут вообще не понадобился.

Как я понимаю, основная ценность будущего приложения - это данные. Я бы начал бы именно с построения хорошей жесткой модели данных со ссылочной целостностью и всевозможной устойчивостью к переходам в некорректные состояния.

Аватара пользователя
myks1992@mail.ru
Сообщения: 64
Зарегистрирован: 2017.11.15, 23:54

Re: !!! Как организовать структуру сложного проекта?

Сообщение myks1992@mail.ru » 2019.03.01, 20:47

Да, как раз по модульности начал партиться только по одной причине, что один из модулей может быть заменён или вовсе перенесён в другой проект. Развернут в другом приложении с небольшими доработками. Или допустим одну регистрацию заменить на другую подключив другой модуль. Все делается больше из-за гибкости. Возможно, я слишком загоняюсь, но пока так вижу. Монолит - быстро. Согласен. Но менять уже сложнее все будет. Ковыряться тоже сложнее. Или эти же рейтинги... Он точно будет использоваться не в одном проекте.

Но очень благодарен за ответы)) Помогают все обдумать. Всзвесить все плюсы и минусы...)

Аватара пользователя
myks1992@mail.ru
Сообщения: 64
Зарегистрирован: 2017.11.15, 23:54

Re: !!! Как организовать структуру сложного проекта?

Сообщение myks1992@mail.ru » 2019.03.01, 20:48

По поводу CodeFirst тоже не хочется заморачиваться. Проект тогда и правда может сильно затянуться, а потом все поменяется и переписывай))

Аватара пользователя
myks1992@mail.ru
Сообщения: 64
Зарегистрирован: 2017.11.15, 23:54

Re: !!! Как организовать структуру сложного проекта?

Сообщение myks1992@mail.ru » 2019.03.01, 20:49

Возможно некоторые модули, которые не будут меняться в будущем буду делать как молодите и модули будут лишь структурой. Они будут зависимы.

Аватара пользователя
myks1992@mail.ru
Сообщения: 64
Зарегистрирован: 2017.11.15, 23:54

Re: !!! Как организовать структуру сложного проекта?

Сообщение myks1992@mail.ru » 2019.03.01, 20:50

и я бы профиль сделал 1 полем JSON и назвал бы "profile", ха-ха

Это делать точно не буду) Так как поиск по полям будет.

anton_z
Сообщения: 378
Зарегистрирован: 2017.01.15, 15:01

Re: !!! Как организовать структуру сложного проекта?

Сообщение anton_z » 2019.03.02, 05:39

myks1992@mail.ru писал(а):
2019.03.01, 20:50
и я бы профиль сделал 1 полем JSON и назвал бы "profile", ха-ха

Это делать точно не буду) Так как поиск по полям будет.
Да, я бы тоже так не стал делать, сделал бы отдельными таблицами на каждый тип, чтобы можно было использовать всю мощь реляционной модели.

Сначала построить абстракцию, а потом реализовать ее - задача труднорешаемая. Большая вероятность что потечет. Лучше идти путем рефакторинга от монолита к модульности. Тогда выделятся более здоровые абстракции и лишь те, которые действительно нужны. Тем более, что проект нетиповой.

Аватара пользователя
myks1992@mail.ru
Сообщения: 64
Зарегистрирован: 2017.11.15, 23:54

Re: !!! Как организовать структуру сложного проекта?

Сообщение myks1992@mail.ru » 2019.03.02, 10:52

Понял)) Наверное так и буду делать. Только сразу модульную структуру и то что сразу не монолит можно делать буду сразу делать как абстракцию.

Ответить