2010-06-25 5 views
2

Я создал собственный фильтр для моего приложения MVC, [LogAttribute]. Методы действий украшены этим, и он несет ответственность за создание объекта LogEntry для передачи в некоторый тип провайдера - ILoggerProvider.Где должна регистрироваться логика в решении DDD?

Мой вопрос: где должно быть ILoggerProvider и его реализация сидит (я хочу использовать технологию DI на нем)? Должны ли они идти в модели домена, проекте пользовательского интерфейса или отдельном классе?

ответ

0

Поскольку регистрация не имеет ничего общего с пользовательским интерфейсом, это, безусловно, неправильное место. Модель домена для представления данных, на мой взгляд. Так что я бы сделал это в отдельном классе или даже в отдельном проекте.

У меня есть приложение MVC, где у меня есть отдельный проект для службы ведения журнала. В моей структуре он находится в самом нижнем слое (доступ к данным), так как он напрямую регистрируется в файлах, а все остальные службы используют его. Я также использую DI на нем с использованием структуры MEF.

Это работает отлично для меня какое-то время, и я не хотел менять его с тех пор. У меня были другие решения, которые я пропустил через некоторое время, потому что они были не такими элегантными, как мое текущее решение.

Надеюсь, что поможет вам с вашим решением.

3

Я обычно утверждал, что ILoggingProvider должен сидеть в пределах модели домена по нескольким причинам. С точки зрения логистики и здравомыслия, ваши классы домена, вероятно, должны ссылаться на регистратор. С точки зрения DDD, учитывая мир SOX и такой, в котором мы живем, можно утверждать, что регистрация является функцией основного домена для соответствия нормативным требованиям.

Теперь реализации могут определенно сидеть в ваших инфраструктурных проектах, не нужно загромождать модель всем этим.

+1

Это имеет смысл, поскольку регулирующий орган налагает ограничения на ваш Ubiquitous Language (UL). В частности, в правиле, в котором говорится: «Ты зарегистрируй это и это событие», есть соответствующая организация в вашей модели. Правила могут быть частью домена, и в силу UL, следовательно, модель получает какой-то артефакт ведения журнала. – RamblinRose

8

Если основная функция вашей программы не Logging или аудит, она должна быть Инфраструктура LoggingService.

И если ваша реализация ведения журнала тесно связана с объектами домена (надеюсь, это не так!), Я бы предложил совершенно отдельную сборку.

+0

Я думаю, что это лучшая идея, чем ответ, отмеченный как лучший –

+0

Согласен, это лучший ответ. – Josh

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