我已经使用 Java 编写了一个任务管理器程序,并暂时制作了一个 UI 实现。该程序目前有 3 层。通过用例控制器与域层交互的表示层,最后是用于持久性的技术服务层。在这一点上,用户可以执行多种操作,例如添加任务、编辑任务状态等……我在此方案中记录器的目的是跟踪用户执行的所有操作。所以,有几个地方我可以调用记录器来编写命令。我不会在表示层中进行任何日志记录,因为这将是一个糟糕的设计决策,所以我只剩下控制器、命令接口(为了实现撤消/重做功能而实现处理所有命令的执行) ),
我认为控制器是一个相对不错的选择,因为它充当 UI 层和域之间的联系点,因此所有值得注意的命令最终都通过控制器,从而可以轻松验证所有重要方法是否正在被记录. 不在控制器中这样做的一个原因是它会降低内聚,增加耦合并可能导致控制器臃肿。
具体命令是另一个潜在的位置,因为它们也具有日志记录所需的所有信息。这将再次导致命令变得不那么内聚并增加耦合。此外,如果我不使用命令界面对域对象执行操作,那么我会丢失日志记录。
最后,这导致我在较低级别的域对象方法中实现记录器。这是一个很好的选择,因为如果正在使用该程序并且所有需要的信息都可用,那么日志总是会发生。唯一不利的部分是记录器命令将稀疏地分散在较低级别的域对象中,这使得确保记录所有正确的方法变得更加困难。
我很乐意就此类决定进行辩论,并感谢您的所有评论。