Какой слой для событий домена, EventHandlers, Dispatcher - PullRequest
3 голосов
/ 13 октября 2010

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

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

У меня вопрос, к какому слою я должен добавить эти компоненты.

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

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

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

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

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

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

Дайте мне знать, если это правильный путь.

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

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

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

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

1 Ответ

2 голосов
/ 14 октября 2010

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

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

...