DDD позволява ли списъкът да бъде обобщен корен?

Опитвам се да разбера основите на дизайна, управляван от домейн. Вчера намерих някакъв код в проект, с който работя, където хранилище върна списък с обекти, т.е. списък getMessages(), където съобщението е обект (има собствен идентификатор и може да се променя). Сега, когато четат за хранилищата в DDD, те са доста конкретни, че хранилището трябва да върне обобщения корен и че всички действия върху агрегата трябва да се извършват чрез извикване на методи в агрегатния корен.

Бих искал да поставя списъка в негов собствен клас и след това просто да върна този клас. Но в моя проект по същество няма нужда да правя това, освен за съответствие с DDD, тъй като показваме само съобщения, добавяме нови или премахваме съществуващо съобщение. Никога няма да се налага да премахваме всички съобщения, така че единствените методи, които ще имаме, са addMessage(...), getMessages(), updateMessage(...) и removeMessage(...), което всъщност прави нашата услуга за домейни.

Някой има ли идеи? Коя е най-добрата практика в DDD, когато става въпрос за описание на агрегати и хранилища?


person Andreas Selenwall    schedule 03.02.2011    source източник


Отговори (1)


Един от объркващите аспекти на новите в DDD е концепцията за хранилище. Хранилище: Посредничи между домейна и слоевете за картографиране на данни, използвайки подобен на колекция интерфейс за достъп до обекти на домейн.

Хранилището предоставя възможност за получаване на препратка към корен на агрегат. Не обект, стойностен обект, а обобщен корен (не съм съгласен с „Хранилището трябва да върне обобщения корен“).

Предложения: - Едно хранилище на сборен корен

  • Интерфейсите на хранилището (напр. IMessageRepository) се намират в модела на домейна
public interface IMessageRepository()
{
     void saveMessage(Message msg);
     void removeMessage(Message msg);
     Ilist<Messages> getMessages();
}
  • Реализации на хранилище (напр. NHibernateMessageRepository, ако използвате nhibernate) се намират извън домейна

Надявам се това да помогне!!

person Pedro de la Cruz    schedule 03.02.2011
comment
Разбира се, хранилището не трябва да връща обобщения корен, винаги трябва да връща само препратка към сборния корен, което се подразбираше. Но благодаря за отговора, помогна. И сега си купих книгата на Ерик Еванс, така че ще проуча допълнително. - person Andreas Selenwall; 22.02.2011
comment
@AndreasSelenwall Каква е разликата между връщането на обобщен корен и връщането на обобщена коренна препратка? Репозиториите са предназначени да връщат обобщени коренни инстанции. - person plalx; 22.11.2014