С одной стороны сервисы у нас распухают и в них перемешана доменная логика, сервисы необходимые приложению и сервисы необходимые симфони.
С другой вынесение сложного сервиса справочников отдельно (как и 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?
Этапом два назревает отделение сущностей от моделей.
Сущности переезжают в Infra/Persistance/SQL/(Entity/Repository/Specification) в них лежат сущности с данными как в таблице. (массивы вместо json, <int> DictionaryItemId как значения справочника.
В Application вместо них модели в Appl/Model/(Project,Task,Doc) в моделях типы богатые <TaskSettings> Project::taskSettings, <Dictionary/StageItem> Task::stage.