2010-10-13 3 views
2

Я читал о Доменные События и видели коды от реализации UDI (в http://www.udidahan.com/2009/06/14/domain-events-salvation/) , Майк Hadlow (http://mikehadlow.blogspot.com/2010/09/separation-of-concerns-with-domain.html), Джимми Богард и реализации Джейсона Dentler в.Какой слой для домена События, EventHandlers, грузоотправитель

В целом мне нравится идея событий.

Мои вопросы - какой слой я должен добавить эти компоненты.

Я не собираюсь использовать какую-либо шину и все события будут обрабатываться синхронно.

Я предполагаю, что интерфейс IDomainEvent, IEventHandler должен идти в Project.Core где остальные интерфейсы хранятся и доступны для всех проектов.

Диспетчер (который является статическим классом) Я считаю, должен идти в Project.Infrastructure.

Я создам новый проект только для обработчиков событий домена. скажем Project.EventHandlers.

Я буду использовать IoC (structuremap) для регистрации всех обработчиков.

События, которые, как я вижу, основаны на бизнес-языке, и по этой причине я считаю, что следует перейти к Project.Domain, где реализованы все Агрегаты.

Сообщите мне, если это правильный путь.

Моя другая путаница в ссылках на проекты. Должно Project.Domain ссылка Project.Infrastructure, так что он может использовать статический Диспетчер событий.

Должен Project.EventHandlers ссылки Project.Domain, потому что он должен знать, какие события там, которые могут быть обработаны.

Я планирую создать класс реестра StructureMap в Project.EventHandlers, который затем будет загружен в Global.asax.

Если об этом говорили ранее, пожалуйста, укажите мне ссылку. Я не смог найти его через Google Поиски.

ответ

2

Являются ли эти проекты или пространства имен? Существует древняя и продолжающаяся дискуссия о мелкозернистых стихах крупнозернистой структуры проекта. Я в крупнозернистом лагере. Сборка - это единица развертывания, а не логический уровень, а структура, которую вы описываете, лучше достигается как пространства имен в одном проекте.

Сказав это, ваша организация выглядит разумно. Мое единственное изменение было бы в том, чтобы поместить интерфейсы вместе с их реализациями, а не в Project.Core.

+0

Благодарим за ответ. У меня были проекты как разные сборки, и вы заставили меня переосмыслить некоторые из этих сборок (если не все) как пространства имен, что, я думаю, приведет к более простой реализации.Сказал, что, как я могу достичь потери связи, если интерфейсы вставлены рядом с их реализацией? Имея их в другой сборке, я ссылался на ядро ​​в приложении MY MVC, а также на уровне служб. – TheMar