DDD / Агрегаты в .NET

Я читал книгу Эванса по DDD и думаю о том, как реализовать агрегаты в .NET. В настоящее время я могу придумать только один способ; выделение агрегатов в отдельные библиотеки классов. Это, однако, кажется излишним (я бы предпочел хранить все объекты домена в одной библиотеке), и мне интересно, есть ли другой способ?

Причина использования 1 lib / aggregate заключается в следующем: Совокупный корень должен знать обо всех доступах к «подобъектам», за которые он отвечает, также агрегированный корень может возвращать подобъекты как результаты своих членов. Следовательно, члены (необходимые для совокупного корня) этих подобъектов не могут быть опубликованы. Таким образом, ваш единственный вариант - сделать их внутренними (поскольку они все еще должны вызываться совокупным корнем). Однако, поместив все агрегаты в один проект, можно получить доступ к этим членам из других объектов домена, которые получили подобъект. Это нежелательно, поскольку позволяет обойти совокупный корень. Эта проблема решается путем разделения всех агрегатов в разных библиотеках.

Дополнительная информация:

Я проверил пример кода Java DDD , и они упаковывают все агрегаты (включая все подобъекты) классы) в другом пакете. Члены, которые могут быть вызваны только из совокупного корня, не имеют модификатора доступа (например: Delivery.updateOnRouting ). В java члены без модификатора доступа package-private (доступны только из того же пакета). Так что это было бы правильным поведением.

Однако пример кода .NET помещает все объекты домена в одну библиотеку классов, а затем делает соответствующие члены общедоступными. Мне это кажется неправильным.

6
задан Marijn 6 July 2011 в 12:26
поделиться