领域层的日志接口

xvd*_*iff 5 c# logging domain-driven-design onion-architecture

我的域层中有一些非常昂贵的业务逻辑,必须在其中跟踪数据,以便了解发生故障时发生的情况。因此,我想声明一个简单的日志记录接口:

public interface ILogger {
    void Log(LogEntry entry);
}
Run Code Online (Sandbox Code Playgroud)

现在我的问题是 - 这个接口属于哪里?当然,日志记录可能是一个基础设施问题(还有一点跨层问题),但是如果我将它放在基础设施层,我的域服务就无法访问它。如果放到领域层,就引入了登录自己领域的概念,感觉很别扭。

我已经在我的应用程序中使用了 CQRS 和 EventSourcing 中的某些概念,但是为域服务中的数据发生的所有事情抛出一个事件似乎有点矫枉过正(尤其是如果数据处于无法返回的状态时)通过域服务,直到进行了进一步的转换。)

Maa*_*ten 4

这里有一些选项。

  1. 使用装饰器。您说您已经在使用 CQRS,因此将装饰器添加到您想要记录的命令/查询中。缺点是您只能在命令/查询执行之前和之后记录日志,而不能在执行期间记录日志。我不确定通过这种方式记录您的活动是否也很容易。

  2. 使用您的界面。如果您选择这条路径,那么您的接口实际上ILogger应该位于域层中,因为域将需要一个实现您的记录器要求的组件,因此域层是定义此接口的层。它的实现必须在其他地方,并且在基础设施层中对我来说听起来不错