这实际上取决于processList
正在做什么。没有黄金法则。我试图遵循的一些规则是:
- 切勿在同一图层上的主要对象之间进行调用。
-
ManagementServiceImpl
永远不应该致电NotificationServiceImpl
。
- 不要在对象之间建立循环依赖关系。
- 如果您发现自己在多个主要对象上重复某些逻辑,请尝试重新构建代码并将其提取到专门的逻辑类中(这也将改进单元测试)。
- E.g。
UserUpdateHandler
或NotificationDispatcher
(这些仍由服务层拥有 - >其他任何人都无法调用它们)...
- 将代码放在逻辑上所属的位置。
- 不要因为某些班级需要做某事而分心。它可能不是代码的正确位置。
- 永远不要在需要之前编写完整的通用代码。
- 这个术语为过早泛化,这是一种类似于过早优化的不良做法。现在保存几行代码可能会导致将来脱发。
- 始终编写能够变通用的代码。
- 这与以前不矛盾。这说 - 总是记住概括,但如果不需要,不要费心写作。提前考虑,但不一定要提前行动。
- 将业务逻辑留给服务层,将数据持久性逻辑留给数据层,将用户交互逻辑留给表示层。
- 不要尝试解析服务层中的用户输入。这并不属于那里,因为计算电子商店应用程序中的最终价格不属于表示层。
醇>
processList
的一些示例:
- 示例I - 通过
Hibernate#initialize
获取其他关系
- 这是服务和DAO层之间真正存在的东西。在较旧的项目中,我们有专门的
FetchHandler
类(由服务层拥有)。在较新的项目中,我们完全将其留给了DAO。
- 示例II - 浏览列表并将业务验证消息添加到结果中
- 示例III - 浏览列表并根据验证错误准备UI消息
旁注:
- MVC与三层架构不同。
- M 模型跨越所有三个图层。表示层包括 V 视图和 C 控制器。