1

我已经使用 Java 编写了一个任务管理器程序,并暂时制作了一个 UI 实现。该程序目前有 3 层。通过用例控制器与域层交互的表示层,最后是用于持久性的技术服务层。在这一点上,用户可以执行多种操作,例如添加任务、编辑任务状态等……我在此方案中记录器的目的是跟踪用户执行的所有操作。所以,有几个地方我可以调用记录器来编写命令。我不会在表示层中进行任何日志记录,因为这将是一个糟糕的设计决策,所以我只剩下控制器、命令接口(为了实现撤消/重做功能而实现处理所有命令的执行) ),

我认为控制器是一个相对不错的选择,因为它充当 UI 层和域之间的联系点,因此所有值得注意的命令最终都通过控制器,从而可以轻松验证所有重要方法是否正在被记录. 不在控制器中这样做的一个原因是它会降低内聚,增加耦合并可能导致控制器臃肿。

具体命令是另一个潜在的位置,因为它们也具有日志记录所需的所有信息。这将再次导致命令变得不那么内聚并增加耦合。此外,如果我不使用命令界面对域对象执行操作,那么我会丢失日志记录。

最后,这导致我在较低级别的域对象方法中实现记录器。这是一个很好的选择,因为如果正在使用该程序并且所有需要的信息都可用,那么日志总是会发生。唯一不利的部分是记录器命令将稀疏地分散在较低级别的域对象中,这使得确保记录所有正确的方法变得更加困难。

我很乐意就此类决定进行辩论,并感谢您的所有评论。

4

1 回答 1

1

先考虑实用性。日志记录通常是维护和管理问题。您设计中的每一层都是记录的候选者,但原因有些不同。

在没有真正了解您的对象层次结构和设计的情况下......

从领域到 UI,每一层都是前一层行为的抽象或集合。你必须问自己一些事情,比如你在寻找什么级别的粒度?查看命令的日志记录会有用吗?查看每个相关域层调用的日志记录是否也有用?破译域调用并将其与特定命令相关联可能并不总是那么容易。

于 2010-12-17T03:32:23.963 回答