我为我的MVC应用程序[LogAttribute]
创建了一个自定义过滤器。操作方法以此为装饰,它有责任创建LogEntry
对象以传递给某种类型的提供者 - ILoggerProvider
。
我的问题是,ILoggerProvider
应该放在哪里(我会想要在其上使用DI技术)?他们应该进入域模型,UI项目还是单独的类?
答案 0 :(得分:8)
除非您的软件的主要功能是日志记录或审核,否则它应该是 Infrastructure LoggingService 。
除非您的日志记录实现与您的域对象紧密耦合(我希望它不是!),否则我会建议一个完全独立的程序集。
答案 1 :(得分:4)
我一般都认为ILoggingProvider应该位于域模型中,原因有几个。从物流和理智的角度来看,您的域类可能需要引用记录器。从DDD的角度来看,鉴于我们生活的SOX世界,人们可以争辩说,日志记录是监管合规性的核心领域特征。
现在,这些实现绝对可以在您的基础架构项目中实现,不需要将模型与所有这些混合在一起。
答案 2 :(得分:0)
由于日志记录与UI无关,因此这绝对是错误的地方。 在我看来,域模型用于数据表示。 所以我会在一个单独的课程或者一个单独的项目中完成。
我有一个MVC应用程序,我有一个单独的日志服务项目。在我的结构中,它位于最底层(数据访问),因为它直接记录到文件,所有其他服务都在使用它。我也使用MEF框架使用DI。
这对我来说已经好了一段时间了,从那以后我不想改变它。 我有一些其他的解决方案,我在一段时间后会跳过,因为它们不像我当前的解决方案那样优雅。
希望能帮助您做出决定。