Size: a a a

Software Design/Architecture/Zen

2021 May 07

ПГ

Павел Г. in Software Design/Architecture/Zen
👍 понял, спасибо
источник

AV

Alexey Vetrov in Software Design/Architecture/Zen
Добрый вечер.
Раз уж дело дошло до агрегатов. Подскажите правильно ли я реализовал:
У меня есть машина. У машины есть доступные цвета.
По итогу:
Car - агрегат
Color - сущность
CarColor - сущность связывает машину и доступный цвет (ссылка на Car и на Color)

Соответственно тут есть агрегат заказа машины.
OrderedCar. Ему для создания нужно передать цвет и саму машину

class OrderedColor {

      private Car $car;
      private CarColor $car;

      public function __construct(Car $car, CarColor $carColor) {
           
            // ?????????????
            if ($car->haveColor($color)) {
                  throw new Exception('Color not exists')      
             }
      }
}

Правилен ли такой подход? Спасибо
источник

VG

Valentin Gerbey in Software Design/Architecture/Zen
Агрегат не может содержать другой агрегат, это противоречит определению агрегата, он может содержать идентификатор другого, если нужно. Что касается связи между агрегатами, то почитать про саги, можно прямо в этом чатике, тут это упоминалось сотни раз
источник

VG

Valentin Gerbey in Software Design/Architecture/Zen
Ты выше кидал видео if(domain logic), вот у тебя в примере как раз такой if-statement
источник

AV

Alexey Vetrov in Software Design/Architecture/Zen
Тут скорее вопрос об ответственностях. Правильно ли то, что мы внутри агрегата лезем внутрь сущностей, проверяем есть ли сущность внутри другой сущности. Либо лучше всего вынести такое в доменные сервисы, возможно.
Другой вопрос - сущности "связи" - например, CarColor, как в примере.
источник

VG

Valentin Gerbey in Software Design/Architecture/Zen
Нельзя определить ответственность глядя на данные (машина, цвет) , нужны юзкейсы, ты, видимо, попытался притянуть юзкейс добавив if-statement..
источник

SP

Sergey Protko in Software Design/Architecture/Zen
Причина по которой так важно разграничивать ответственность - отслеживать и распределять разные потоки изменений требований. Если мол надо что-то поменять что бы изменения были сформулированы и меньше влияли на других участников системы. Соответственно понять че как у тебя с srp можно только понимая почему кто и зачем хочет изменений в чем-то
источник

SP

Sergey Protko in Software Design/Architecture/Zen
А не вот эти детские упрощения которые приводят к абстрактным фабрикам фабрик и прочие слои
источник

SP

Sergey Protko in Software Design/Architecture/Zen
Агрегатам нельзя пересекаться потому что изменение одного агрегата должно происходить атомарно/последовательно, иначе нет imidiate consistency гарантий
источник

VG

Valentin Gerbey in Software Design/Architecture/Zen
ответственность, агрегаты, границы — это самое сложное, на таком примере не получится сказать правильный ли подход и как лучше делать, так как там ничего нет по сути..
а видос про ифы тебе стоит ещё пересмотреть, возможно парочку раз даже, там вообще с каждым просмотром, что то новое всплывает
источник

SP

Sergey Protko in Software Design/Architecture/Zen
Я до сих пор его раз в пол года пересматриваю
источник

SP

Sergey Protko in Software Design/Architecture/Zen
И ещё парочку
источник

F

Forestoff in Software Design/Architecture/Zen
поделитесь, если не сложно
источник

AG

Alexander Gorodok in Software Design/Architecture/Zen
Праздник когда? Ровно 2к участников.
источник

SP

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

SP

Sergey Protko in Software Design/Architecture/Zen
Ох, сча соберу в гист
источник

AN

Allan Nettzan in Software Design/Architecture/Zen
Привет еще раз всем!
Нужно оставлять комментарии к заявкам.
При создании заявки колится (call) создание агрегата конфигурации комментарирования заявки (можно ли комментировать и некоторые правила по коментингу)

К примеру создана заявка я оставляю комментарий

В команд-хенделере добавления комментария я сначала подугружаю из агрегат-стора конфигурации и смотрю могу ли я комментировать

А уже после создаю комментарий и пишу его в поток событий (event sourcing)
источник

AN

Allan Nettzan in Software Design/Architecture/Zen
Правильно ли я делаю?
источник

SP

Sergey Protko in Software Design/Architecture/Zen
Звучит сложно для комментов
источник

SP

Sergey Protko in Software Design/Architecture/Zen
Оно работает? Оно легко меняется? Поток данных легко проследить? Тесты пишешь? Если на все да - значит правильно
источник