Этап
Открыта
Тип
Исследование
Приоритет
Обычный
Трудоемкость
Обычная
Создана
Дата создания
4 года назад
Назначена
Обновлена
2 года назад

С одной стороны сервисы у нас распухают и в них перемешана доменная логика, сервисы необходимые приложению и сервисы необходимые симфони. С другой вынесение сложного сервиса справочников отдельно (как и Security) не помогает. Кроме того у нас появляются все больше разных объектов и моделей, не пойми куда пришитых.

В данной задаче предлагается:

  • Внести Dictionaries обратно в Servces сделана в tndt-42
  • Вероятно туда же внести Security
  • Все директории DTO, Object переименовать в Model сделана в tndt-42
  • Создать директории Presentation, Infrastructure, Application
    • В Presentation внести функции twig, Формы с их моделями, Сервисы для правильного и красивого отображения. Вероятно контроллеры.
    • В Infrastructure вероятно будет Security и что-то еще.
    • В Application вносим доменную логику, сервисы ответственные за бизнес-действия.

EventSubscriber все так же разноcим по папкам слоев так чтобы в каждом слое были только относящиеся к нему сабскрайберы.

Вопросы/тезисы

  • То, что разнести необходимо явно это Presentation и все остальное.
  • Нужен ли нам отдельный Domain вопрос, ибо мы не хотим сильно отбегать от симфони, у нас не так много бизнес-логики.
  • Если делим как делим Application/Infrastructure/Domain?

Панель управления

Комментарии могут оставлять только авторизованные пользователи
 demius 3 года назад

Этапом два назревает отделение сущностей от моделей.

Сущности переезжают в Infra/Persistance/SQL/(Entity/Repository/Specification) в них лежат сущности с данными как в таблице. (массивы вместо json, <int> DictionaryItemId как значения справочника.

В Application вместо них модели в Appl/Model/(Project,Task,Doc) в моделях типы богатые <TaskSettings> Project::taskSettings, <Dictionary/StageItem> Task::stage.

 demius 3 года назад

В нашем Security лежит наша бизнес-логика проверки наших прав доступа, почему это инфраструктура? Если выделять infrastructure то уносить туда persistant с сущностями и репозиториями доктрины, в application делая копии всех сущностей как модели

 demius 3 года назад

У нас есть четкое понимание что должно быть в presentation, с остальным пока не очень ясно. Так что давайте решать поэтапно.

  1. Два слоя Presentation и Application
    • Presentation/web/Controller, Form, ViewModel, Services/Twig, Stylizer
    • Application - все остальное, как есть сейчас
  2. Application отделяем объекты, персистанс
    • Application/Model/Entity - только сущности БД
    • Application/Model/DTO - ProjectSettings, UserSettings, TaskTableParameters, TaskListParameters
    • Application/Service/Actions - TaskService, ProjectService - бизнес-действия вероятно уйдут в src/Domain
    • Application/Service/Application?? сервисы приложения Dictionary, TableParameter, Security
    • Application/Persistance/Repository или src/Infrastructure/Repository?
    • Application/???/Specification

В каждом слое будут свои Event и EventSubscriber будут ли они слушать и чужой слой вопрос.