2015-07-17 3 views
1

Я занимаюсь некоторыми деталями реализации, рассматривая термины, упомянутые в названии выше.Aggreate Root, Aggregates, Entities, Value Objects

Может ли кто-нибудь сказать мне, верно ли мое толкование?

Для справки я смотрю на Домен CRM

Как AggregateRoot я мог видеть клиентов.

Это может иметь Entities как Адрес, который содержит улицу, почтовый индекс и так далее.

Теперь есть что-то вроде Контакты и деятельности это должно быть, по крайней мере агрегаты. Правильно? Теперь, если контакты и действия будут иметь сложную бизнес-логику. Например, «Каждый раз, когда создается контакт типа заказа, рабочий процесс заказа должен быть запущен»

Должен ли тогда контакт быть скоплением совокупности? Каковы могут быть последствия внедрения, которые могут возникнуть в результате этого?

Более подробно при поиске и событии Sourcing, будет ли у каждого агрегата собственный Stream? В этом случае у Клиента могут быть тысячи действий.

Было бы здорово, если бы кто-нибудь мог руководить ими, в какой части мое понимание правильное и которое я отличаю от общей интерпретации.

+2

Не существует общей интерпретации того, как моделировать тип домена, поскольку каждый домен уникален. Домен CRM может быть смоделирован по вашему описанию или иным образом. Я предлагаю вам определить aggregate/entity/VO, как вы их понимаете, и задавать конкретные проблемы, а не просто размытый пример. – guillaume31

+0

Только одно: обычно «Адрес» является классическим примером объекта значения. Вы уверены, что вам это нужно? –

+0

Ваше право, адрес должен быть скорее объектом value.as, он не должен быть идентифицирован и всегда будет существовать только внутри данного агрегата –

ответ

2

Что вы подразумеваете под «как минимум агрегатами»?

Агрегат представляет собой набор из одного или нескольких связанных объектов. Агрегат может быть доступен только из его корневого объекта, также называемого совокупным корнем. Агрегат определяет транзакционные границы для объектов, которые должны быть сохранены в любое время. У Джимми Богарда есть хорошее объяснение агрегатов here.

При использовании источников событий каждый агрегат должен иметь собственный поток. Поток используется для построения агрегатов, и нет причин позволять нескольким агрегатам использовать один и тот же поток.

Вы должны стараться, чтобы ваши агрегаты были маленькими. Если вы ожидаете, что ваш объект клиента будет иметь тысячи действий, тогда вы должны посмотреть, можно ли проектировать действия как отдельный агрегат, пока его границы гарантируют, что вы не оставите систему в недопустимом состоянии.