А теперь представь, что драйвер стал инвалидом и его нужно снять с машин в которых нет инвалидного знака
Да то же самое. driver.makePersonDisables В параметре передаешь кары, к которым обращаешься внутри и передаешь им драйвера для взаимной проверки.
так а в чем проблема снять со всех и поставить только на те, у которых этот знак есть. И вообще, есть ли такие авто в парке?
Проблема в том, что если в агрегате Driver сделать публичный метод makeInvalid(), который просто будет делать $this->invalid = true; то этот драйвер нарушит правила езды на некоторых машинах. Если мы сделаем это через доменный сервис, в котором проверим все машины на наличие у них такого драйвера и снимем его с этих машин а потом сделаем makeInvalid() и сохраним новое состояние драйвера, то нужно будет постоянно помнить об этом. Что нельзя просто так взять и дернуть метод driver->makeInvalid(), а делать это можно только через сервис-оркестратор.
В c# можно помечать методы как internal. Там можно было бы сделать, чтобы и метод такой был, и не торчал наружу
Что-то вроде такого? https://pastebin.com/CneyUDrk
Так не хорошо. Через агрегат Drivers - ты НЕЯАВНО изменяешь аггрегаты Cars. В данном случае есть $this->cars, но представь что у тебя 1500000 машин и 1500000 водителей и еще больше связей. Там просто нет $this->cars()
во-первых водитель становится инвалидом не мгновенно и еще легко накинуть такой кейс: снимать его с машин можно по очереди и вероятно даже бизнес может захотеть делать это в ручном режиме, чтобы условный менеджер посмотрел на список машин и решил, что может лучше не снимать водителя, а машины апгрейднуть, чтобы он мог на них ездить
можно еще по частям снимать с машины)
Пример с машинами и водителями - абстрактный и не совсем годится для нашего контекста. У нас crm по продаже сложного мед.оборудования, которое может содержать рандомный набор характеристик и от этих характеристик зависит очень многое.
тогда что на счет примера транзакции по покупке хотдога?
мой поинт, что такие случае требуют не столько технического решения, сколько бизнес-решения. Вот продали вы из Словакии в Чехию какое-то мед оборудование и оно уже в пути, а тут приходит новое постановление с изменениями условий таможни для мед оборудования. Можно хоть в одну транзакцию все это отметить невалидным, только это не решение проблемы)
Обсуждают сегодня