Size: a a a

Software Design/Architecture/Zen

2021 July 18

SP

Sergey Protko in Software Design/Architecture/Zen
Условно - не важно какой тип. А если важно - распиши почему
источник

СП

Сергей Предводителев... in Software Design/Architecture/Zen
верно, не важно какой тип
источник

СП

Сергей Предводителев... in Software Design/Architecture/Zen
Но у нас же для каждого типа проекта свой агрегат. И в каждом из этих агрегатов должен быть метод changeEndDate().
источник

SP

Sergey Protko in Software Design/Architecture/Zen
Нет, у тебя эти "типы" ничего не знают ни о датах ни о статусе, про это знает только project details
источник

ИЛ

Иван Лещёв in Software Design/Architecture/Zen
У разных сущностей разные статусы и могут меняться идентификаторы с числовых на ууид или на составной.
Если сущности с ивентсорсингом, то может быть у них будет общий абстрактный предок.
источник

СП

Сергей Предводителев... in Software Design/Architecture/Zen
но ProjectDetails — это же одна из сущностей внутри агрегата?
источник

SP

Sergey Protko in Software Design/Architecture/Zen
Шта?
источник

SP

Sergey Protko in Software Design/Architecture/Zen
Нет это отдельный агрегат
источник

ИЛ

Иван Лещёв in Software Design/Architecture/Zen
Наследование как выше не нужно.
источник

SP

Sergey Protko in Software Design/Architecture/Zen
Агрегаты должны быть маленькие и обслуживать конкретные инварианты стэйта
источник

SP

Sergey Protko in Software Design/Architecture/Zen
Что бы спроектировать красиво тебе надо не о сущностям думать а о юзкейсах и инвариантах
источник

СП

Сергей Предводителев... in Software Design/Architecture/Zen
мм... то есть отличие от предложенного мной изначально варианта только в названиях. У нас не некий общий "Проект", а "Детали проекта" и объединено всё общим ProjectId. Так?
источник

СП

Сергей Предводителев... in Software Design/Architecture/Zen
Это когда разные агрегаты работают с одними и теми же данными?
источник

SP

Sergey Protko in Software Design/Architecture/Zen
Отличие в том что у project details и каком нибудь "такой то тип проекта" (тоже сомнительно что это сущность которая тебе нужна) не будет ссылок друг на друга. Вообще. Все что будет объединять из вместе на уровне модели данных это ,ProjectId
источник

СП

Сергей Предводителев... in Software Design/Architecture/Zen
Ага, понял.
Но почему сомнительно, что сущность нужна, если для каждого типа проекта много полей своих и много функционала своего.
источник

SP

Sergey Protko in Software Design/Architecture/Zen
Нельзя агрегатам работать с одними и теми же данными, весь смысл агрегатов в том что бы стэйт для операций разделить так что бы не пересекалось ничего - так проще говорить что мол "инвариант такой-то будет собоюдег"
источник

SP

Sergey Protko in Software Design/Architecture/Zen
Я не уверен что для каждого типа проектов нужна своя сущность. Возможно там сущности можно разбить по правилам которые эти разные типы проектов отличают между собой
источник

СП

Сергей Предводителев... in Software Design/Architecture/Zen
ага, я этих проблем и опасаюсь при делении на агрегаты
источник

SP

Sergey Protko in Software Design/Architecture/Zen
Ну так ты ж делишь, ты либо соблюдаешь это или нет. Не понятно чё тут опасаться
источник

ИЛ

Иван Лещёв in Software Design/Architecture/Zen
тут главное на ноль не делить!
источник