c# - 领域层的日志接口(interface)

标签 c# logging domain-driven-design onion-architecture

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

public interface ILogger {
    void Log(LogEntry entry);
}

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

我已经在我的应用程序中使用了 CQRS 和 EventSourcing 中的某些概念,但是为域服务中的数据发生的所有事情抛出一个事件似乎是一种矫枉过正(尤其是当数据处于一种不存在的状态时)在进行进一步的转换之前,域服务不会返回它。)

最佳答案

这里有一些选项。

  1. 使用装饰器。你说你已经在使用 CQRS,所以将装饰器添加到你想要记录的命令/查询中。缺点是您只能在执行命令/查询之前和之后进行记录,而不能在执行期间进行记录。而且我不确定以这种方式记录您的事件是否也容易。

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

关于c# - 领域层的日志接口(interface),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24360011/

相关文章:

c# - 使用 C# 反射访问堆栈跟踪中的对象

c# - 我可以创建一个向仪表板公开功能但不使用 Azure 存储的 Azure Webjob 吗?

java - Log4j2:动态创建多个日志的日志文件

c# - 我如何在C#中更改月日,年的日期格式

c# - StructureMap 具有相同接口(interface)但具有不同构造函数参数的多个实例

python-3.x - 有什么方法可以附加相同的日志文件而不是在 python 3.x 中创建新文件?

database - 许多日志文件的存储

php - DDD建立包含集合属性的值对象

architecture - 协调 DDD、 View 模型和性能

c# - 域事件处理程序什么时候开始发挥作用?