【问题标题】:Service layer design服务层设计
【发布时间】:2020-06-23 19:33:53
【问题描述】:
我正在开发一个宠物项目,它基本上是 3 层应用程序(UI、服务、DAO)。在当前状态下,我们不使用 DI 框架,我有一个关于架构的问题。假设我们有 Order、Goods 和 Manager 实体,相等的 DAO 类以及服务。根据 BL,OrderService 应该知道 DAOManager 和 DAOGoods 或 ManagerService 和 GoodsService。请记住,我们仍然不使用 Spring/Guice,哪种连接方式似乎更合适?谢谢。
【问题讨论】:
标签:
java
service
architecture
【解决方案1】:
即使您没有使用 DI 框架,您的类的设计仍应允许稍后使用 DI,即使所有依赖项构造函数参数。
这只是很好的设计。一个对象预先声明其依赖关系,强制它们在实例化时提供,从而允许类是独立的,并允许轻松模拟和单元测试。
在您的示例中,OrderService 应提供以下构造函数之一,具体取决于您的实现风格):
- OrderService(DAOManager, DAOGoods)
- OrderService(ManagerService, GoodsService)
- OrderService(IManagerService, IGoodsService) - [接口不是具体的]
您需要在没有 DI 框架的情况下手动管理这些对象及其依赖项的创建和实现,这可能会变得很棘手。我强烈推荐在没有 DI 容器的情况下使用构建器模式和服务定位器。