Size: a a a

Software Design/Architecture/Zen

2021 May 07

ПГ

Павел Г. in Software Design/Architecture/Zen
Я подумал сам класс, а как такового класса и нет. Просто немного путаница у меня возникает. Я раньше понимал что агрегат это некое больше ядро, которое управляет сущностями. Как бы публичное апи для маленьких сущностей. Теперь же (в текущем разговоре )наоборот - агрегат это класс для поддержки атомарности неких небольших транзакций и инвариантов, а сущности как таковые вообще физически (как класс в коде) - не существуют. Или я не прав?
источник

SB

Sergei Baikin in Software Design/Architecture/Zen
с моей колокольни да

Наша задача как раз сделать транзакции как можно меньше маленькие ашрегаты это обеспечивают как раз.
Опять же сущность многие назвают класс который мапится на базу

Такие классы по прежнему могут быть для круда например там где нет логики.
источник

VG

Valentin Gerbey in Software Design/Architecture/Zen
Да, можешь прочитать эту статью https://udidahan.com/2012/03/05/dont-try-to-model-the-real-world-it-doesnt-exist/
источник

ПГ

Павел Г. in Software Design/Architecture/Zen
@wa1entin @GDXbsv Спасибо!
источник

ПГ

Павел Г. in Software Design/Architecture/Zen
Тут просто тогда вопрос, будет ли продукт являться именно сущностью. Т.е. класса нет, а сущность есть.
источник

SB

Sergei Baikin in Software Design/Architecture/Zen
Да продукт сущность и определяет эту сущность идентификатор. И только он.
А дальше по нему ты можешь стать то что нужно в ui например
источник

ПГ

Павел Г. in Software Design/Architecture/Zen
Ммм понятно. Т.е. сущность это только ID. Остальная инфа по ней - это партиции данных. Спасибо, вроде стало более понятно :)
источник

F

Forestoff in Software Design/Architecture/Zen
А кто может подсказать где почитать про связь между агрегатами. Когда нужно референсы сохранять прямые, и когда нужно сохранять только айдишник?

https://enterprisecraftsmanship.com/posts/dont-use-ids-domain-entities/

Нашел такую статью. Тут рекомендует автор воздержаться от айдишников, когда сам вернон рекомендует использовать именно айдишники, ибо тогда агрегат, на который ссылаются - остается неизменным (в теории) + производительность.

Где истина?
источник

VG

Valentin Gerbey in Software Design/Architecture/Zen
Сущность это не ид, сущность это набор данных которые можно идентифицировать по ид
источник

ПГ

Павел Г. in Software Design/Architecture/Zen
Но при этом самого класса получается нет, раз данные в разных контекстах?
источник

SB

Sergei Baikin in Software Design/Architecture/Zen
Если есть референсы то это уже один агрегат из нескольких объектов. Агрегат рут начинают в таких случаях вводить вроде как.
источник

F

Forestoff in Software Design/Architecture/Zen
Агрегат может ссылаться на другой агрегат только по айдишнику?
источник

SF

Segmentation Fault in Software Design/Architecture/Zen
Да
источник

SB

Sergei Baikin in Software Design/Architecture/Zen
Он не может  ссылаться. Ссылка это ссылка на объект. Айдишник это  просто скалярное значение.
источник

F

Forestoff in Software Design/Architecture/Zen
А в ситуации, когда один агрегат содержитв себе несколько агрегатов. Дочерние агрегаты ссылаются на родительский по id. При этом для родителя эти агрегаты - сущности и он держит его ссылку. Верно?
источник

SB

Sergei Baikin in Software Design/Architecture/Zen
Если у вас ссылка то зачем вам там айди прилетать?
Ссылка уже имеет весь объект. В нем айди есть
источник

F

Forestoff in Software Design/Architecture/Zen
Я про такой пример

class Order {
     Item[]  items;
}

class Item {
      int orderId;
}
источник

VG

Valentin Gerbey in Software Design/Architecture/Zen
У тебя могут быть 5 классов продукт, если сильно хочется(в каждом контексте по продукту);
выше ты сам давал определения агрегату, так вот они не конкурируют, агрегат все так же является границей транзакции, партицией данных, защищать инварианты и тд, но при этом может управлять сущностями, просто в контексте sales сущность продукт будет представляема как ид и цена)
источник

SB

Sergei Baikin in Software Design/Architecture/Zen
Зачем нужен ордер айди в айтеме?
К айтему в таком случае ни кто не может иметь доступа кроме order. Иначе он свою консистентность и инварианты не сможет гарантировать. А ордер уже знает свой айди.
источник

F

Forestoff in Software Design/Architecture/Zen
Спасибо. Стало теперь понятно более менее
источник