Re[38]: Что если не разделять строго dto, entity, bo...
От: amironov79  
Дата: 29.01.26 09:33
Оценка:
Здравствуйте, TG, Вы писали:

TG>А в каких случаях надо абстрагироваться от способа получения данных? И зачем?


Когда работаешь с несколькими источниками однотипных данных, которые могут отличаться как по протоколу, так и по схеме данных. Интерфейс у репозитория описывается в терминах домена, реализация для каждого источника своя.
Re[39]: Как внедряли DDD в Яндекс 360.
От: Sinclair Россия https://github.com/evilguest/
Дата: 29.01.26 14:27
Оценка:
Здравствуйте, Miroff, Вы писали:

M>Дизайн строится не от данных, а от от операций.

Это интересно. Давайте построим дизайн от операций.
M>Если у тебя не получается логично присунуть метод, значит ты что-то сделал не так.



M>Давай разберем что. В ДДД принято идти от предметной области, а в предметной области нет никаких ER, а есть единица товара, у которой есть SKU, физическая локация (на главном склад, у перевозчика, у покупателя и т.п.) и обязательства (вернуть постащику, сжечь, поставить покупателю и т.п.) И когда ты такую модель строишь у тебя логичным образом возникает поединичный учет и резервирование товара логично превращается в метод sku_item.createObligation(Supplybbligation(Order))


M>ER модель при этом будет выглядеть так


M>СКУ, Единица товара, Склад, обязательство, заказ


M>Связи:

M>СКУ — единица товара (один-ко-многим)
M>обязательство — единица товара (один-ко-многим)
M>заказ — обязательство (один-ко-многим)
M>СКУ — склад (многие-к-одному)

Непонятно. Какие атрибуты будут у этих сущностей? Как устроен метод sku_item.createObligation(Supplybbligation(Order))?
Почему метод вы написали так, а не SupplyObligation.create(sku_item, Order), и не Order.createSupplyObligation(sku_item)?
Как мне гарантировать атомарность резервирования товаров в заказе — либо весь заказ, либо ничего?

M>При этом логичным образом решаются и другие задачи, вроде "посчитать себестоимость хранения товара на складе" или "посчитать ущерб от уничтоженного товара находившегося на сгоревшем складе"

Давайте пока с простым разберемся. А потом попробуем придумать, к какому из классов приделать упомянутые вами методы.

S>>Что такое "проекции друг на друга"? Расскажите подробнее.


M>Это из функционального программирование пришло. В данном случае это обратимое преобразование F(Товар, Склад, Заказ) -> (Товар, Остаток, Резерв)

По-прежнему ничего не понятно. Кто тут на кого проецируется? Я в функциональном программировании термина "проекция" не встречал. Если он общепринятый — киньте ссылку на первоисточник, если ваш — распишите подробнее.
M>Ты можешь рассматривать проекции как DB view только не с точки зрения БД, а с точки зрения классов.
Непонятно. В DB View не ограничены проекциями (в терминах реляционной алгебры).
Уйдемте отсюда, Румата! У вас слишком богатые погреба.
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.