2014-01-07 4 views
3

Я пишу большой проект, и я хочу применить к нему Domain Driven Design (DDD). Вот мои проекты и объяснение:.NET MVC 5 и архитектура лука

  • XXX.Domain.Entities - POCO (Plain Old C# Object) классы (Ex: Message.cs)
  • XXX.Domain.Services - Услуги в области

  • XXX.Infrastructure - Интерфейсы инфраструктуры

  • XXX.Infrastructure.Concrete - осущ из intefaces от XXX.Infrastructure
  • XXX.Infrastructure.DI - Зависимость от инъекции мод üles (Ex: RepositoryModule.cs)

  • XXX.Services - Услуги приложения (но я не знаю, куда поместить осущ)

  • XXX.Tests - Юнит-тесты (Ex: SomeTest .cs)

  • XXX.Web.Ui - MVC5 приложение

Но я не могу понять, где я должен поставить кого-либо из тех, кто: IMessagesService.cs (BL для модельных сообщений), MessagesService. cs (BL для сообщений модели), Sessio nHelper.cs, MessageMapping.cs, IMailerService.cs, MailerService.cs

Также: Где я должен разместить IRepository и GenericRepository (impl)?

+0

с http://stackoverflow.com/questions/18166740/what-are-the-typical-layers-in-an-onion-architecture/18168046#18168046 похож – Hippoom

ответ

1

Вы можете просто поместить все реализации в папку Impl в рамках проекта XXX.Services, если вы хотите организовать свои прикладные службы. Существует вариант, который вы используете вместо создания нового проекта только для реализаций.

enter image description here

Но SessionHelper и MessageMapping выглядеть DataAccess конкретной инфраструктуры и следует ставить близко к компонентам доступа к данным.

Кроме того, я бы поместил все сущности домена и службы домена в один проект Domain Model. В этом случае ваша логика домена не будет разделена между двумя проектами: XXX.Domain.Entities и XXX.Domain.Services, чтобы вся ваша логика домена сгруппировалась.

EDIT:

Существует хороший список различий между службой области и сервисами приложений в посте "Services in Domain-Driven Design (DDD)":

  • услуга Доменной очень зернистая, где в качестве службы приложений является фасад с использованием API.
  • Доменные службы содержат логику домена, которая, естественно, не может быть помещена в объект объекта или объекта, тогда как службы приложений организуют выполнение логики домена и сами не реализуют какую-либо логику домена.
  • Методы домены домена могут иметь другие элементы домена в качестве операндов и возвращаемых значений, тогда как службы приложений работают с тривиальными операндами, такими как значения идентичности и примитивные структуры данных.
  • Службы приложений объявляют зависимости от инфраструктурных служб, необходимых для выполнения логики домена.
  • Обработчики команд - это аромат приложений, которые сосредоточены на обработке одной команды, как правило, в архитектуре CQRS.
+0

А где я должен поставить IMailerService и MailerService (impl)? –

+0

Обычно «MailerService»/'IMailerService' является частью Application Services. Но, если необходимо иметь доступ к «IMailerService» в модели домена, вы можете создать другой проект (например, Core) с основными интерфейсами и ссылаться на него из других проектов. –

+0

Итак, какой projext я должен поставить MailerService? –

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