记录逻辑应该放在DDD解决方案中的哪个位置?

Dav*_*ale 3 .net c# asp.net domain-driven-design

我为我的MVC应用程序创建了一个自定义过滤器[LogAttribute].操作方法用这个装饰,它有责任创建一个LogEntry对象以传递给某种类型的提供者 - ILoggerProvider.

我的问题是,它应该在哪里ILoggerProvider实现(我会想要在它上面使用DI技术)?他们应该进入域模型,UI项目还是单独的类?

Vij*_*tel 8

除非您的软件的主要功能是Logging或Auditing,否则它应该是Infrastructure LoggingService.

除非您的日志记录实现与您的域对象紧密耦合(我希望它不是!),我建议一个完全独立的程序集.


Wya*_*ett 5

我通常认为 ILoggingProvider 应该位于域模型中,原因有几个。从后勤和健全的角度来看,您的域类可能需要引用记录器。从 DDD 的角度来看,考虑到 SOX 和我们生活的世界,人们可以认为日志记录是监管合规性的核心域功能。

现在,这些实现绝对可以放在您的基础设施项目中,无需用所有这些来混淆模型。

  • 这是有道理的,因为监管机构正在对您的通用语言 (UL) 施加限制。特别是,“你应该记录这个和那个事件”的规定在你的模型中有一个相应的实体。法规可以是域的一部分,并且凭借 UL,因此模型获得了某种记录工件。 (2认同)

Mar*_*rks 0

由于日志记录与 UI 无关,因此这绝对是错误的地方。在我看来,领域模型是用于数据表示的。所以我会在一个单独的班级甚至一个单独的项目中完成它。

我有一个 MVC 应用程序,其中有一个用于日志记录服务的单独项目。在我的结构中,它位于最底层(数据访问),因为它直接记录到文件并且所有其他服务都在使用它。我还通过 MEF 框架在其上使用 DI。

这对我来说已经运行良好一段时间了,从那以后我就不想改变它了。我有其他解决方案,但过了一会儿我就跳过了,因为它们不像我当前的解决方案那么优雅。

希望这对您的决定有所帮助。