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

时间:2010-06-25 14:57:09

标签: c# .net asp.net domain-driven-design

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

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

3 个答案:

答案 0 :(得分:8)

除非您的软件的主要功能是日志记录审核,否则它应该是 Infrastructure LoggingService

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

答案 1 :(得分:4)

我一般都认为ILoggingProvider应该位于域模型中,原因有几个。从物流和理智的角度来看,您的域类可能需要引用记录器。从DDD的角度来看,鉴于我们生活的SOX世界,人们可以争辩说,日志记录是监管合规性的核心领域特征。

现在,这些实现绝对可以在您的基础架构项目中实现,不需要将模型与所有这些混合在一起。

答案 2 :(得分:0)

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

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

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

希望能帮助您做出决定。