Где логика логирования должна находиться в решении DDD? - PullRequest
3 голосов
/ 25 июня 2010

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

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

Ответы [ 3 ]

8 голосов
/ 26 июня 2010

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

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

4 голосов
/ 25 июня 2010

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

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

0 голосов
/ 25 июня 2010

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

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

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

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

...