Создаете ли вы агрегатный объект при создании корневого объекта? - PullRequest
1 голос
/ 03 апреля 2009

Или вы определяете новый объект, который среди прочих содержит объект Root Entity?

public class SomeAggregateName()
{
   public EntityRoot root {get;set;}
   public Entity entity {get;set;}
}

ИЛИ Это совокупность подразумевается?

public class EntityRoot()
{ 
   public Entity entity {get;set;}
}

Ответы [ 2 ]

3 голосов
/ 05 апреля 2009

Обычно подразумевается совокупность, т. Е. Это сущность.

Ваш пример делает его немного сложным для подражания, потому что у вас фактически нет домена.

Но давайте возьмем классический пример корня совокупности заказов, который содержит строки заказа. Орден - это Сущность, а также Совокупный Корень. Строка заказа содержится в Агрегате заказа, поэтому к ней нельзя получить доступ непосредственно за пределами Агрегата заказа.

// This is the Order Aggregate Root
public class Order
{
    private IList<OrderLine> OrderLines { get; set; }
}
0 голосов
/ 22 апреля 2009

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

если я хочу использовать FluentNHiberanate, например, для инициализации сущностей моего домена, необходимо, чтобы мой класс Order выглядел следующим образом:

public class Order
{
    public virtual IList<OrderLine> OrderLines { get; set; }
}

это нарушает инкапсуляцию внутренних объектов агрегата. Есть идеи, как это сделать, не нарушая инкапсуляцию?


ОК нашел его (одно из доступных решений), измените член OrderLines на private и добавьте его в файл отображения:

HasMany(Reveal.Property<Order, IEnumerable<OrderLine>>("OrderLines"))
.Inverse()
.Cascade
.All();
...