2012-11-16 3 views
0

Я только что прочитал главу об агрегатах и ​​обнаружил, что я что-то неправильно понимаю. У нас есть три объекта: Участник, Предмет, Ставка. Вот фрагмент кода из книги:Агрегаты доменных моделей

public class Member 
{ 
    public string Id {get; set;} 
    ... 
} 

public class Item 
{ 
    public string Id {get; set;} 
    public IList<Bid> Bids {get; set;} 
    ... 
} 

public class Bid 
{ 
    public Member Member {get; set;} 
    ... 
} 

Autor писал, что пункт и его предложения является один агрегат как Bid не имеет смысла без пункта. Таким образом, Item и Member являются совокупными корнями. Однако я думаю, что ставка не имеет смысла и без члена. И кажется, что это логично. Итак, что такое ставка в этой ситуации? Является ли это частью агрегата Item?

ответ

2

Прежде всего, совокупности и совокупного корень являются различных концепций. В этом случае Item и Bid могут быть частью одного и того же агрегата, но только один, я думаю, что Item является совокупным корнем (AR).

Определение того, какой класс является AR, сильно зависит от ограниченного контекста (BC). Кроме того, этот класс-член может быть представлен только как простой идентификатор в BC, это не тот член, который вы можете использовать в другом BC (вы видите, что DDD очень сложный).

Элемент включает в себя как Bid, так и Member, все вместе образуют совокупность, но Item является агрегированным корнем, то есть объектом фасада, используемым другими для управления агрегатом.

+0

Итак, как бы вы получили ставки участника? Я полагаю, что класс-член должен будет ссылаться на Элементы, на которых эта ставка участника. Затем в корне агрегата Item может быть функция для извлечения ставок участника для этого элемента. –

+0

Я написал, что Item и Member являются AR. Хм, я не согласен с тем, что агрегаты могут очень сильно отличаться от BC в одной модели домена. – Danil

+0

@ Meta-Knight Моделирование домена не имеет ничего общего с хранилищем базы данных, и этот пример очень упрощен, поэтому он напоминает, как объекты ORM могут быть смоделированы, но это все. Я всегда рассматриваю домен и постоянство разных, поэтому я не забочусь о хранении, когда имею дело с доменом. – MikeSW

1

Хотя не совсем то же самое, это очень похоже на this SO question, где ответ Ричарда Цирерола порядочный.

Но я бы указал вам на the book on page 71, где диаграмма показывает, что ставка имеет ссылку на участника и поэтому может достигать OUT для получения этой информации, но член не может достичь IN. Единственный способ проникнуть через элемент. Таким образом, элемент является контрольной точкой в ​​примере. Это помогает сохранить то, что может сделать то, что понятно и транзактивно.

Смежные вопросы