Java 重构依赖项过多的服务
我正在用Java 重构依赖项过多的服务,java,spring,dependency-injection,Java,Spring,Dependency Injection,我正在用Spring框架(Spring Boot)和JDBC(无JPA或ORM)开发一个Web应用程序,所以我使用依赖注入通过层使用bean。该结构由三个主要层组成:数据库(DAOs)、服务和控制器DAO被注入到其他DAO或服务层和服务中的其他服务和控制器层中 My数据库层由数据库中每个表的一个DAO组成。每个DAO都有通用的CRUD和一些根据需要的特定操作。我总共有10多张桌子(大约15张) 道的例子 public class Dao1 implements Crud<Entity, I
Spring框架(Spring Boot
)和JDBC
(无JPA
或ORM
)开发一个Web应用程序,所以我使用依赖注入通过层使用bean
。该结构由三个主要层组成:数据库(DAOs)、服务和控制器<代码>DAO
被注入到其他DAO
或服务层
和服务
中的其他服务
和控制器层
中
My数据库层
由数据库中每个表的一个DAO
组成。每个DAO
都有通用的CRUD
和一些根据需要的特定操作。我总共有10多张桌子(大约15张)
道的例子
public class Dao1 implements Crud<Entity, Integer>{
public Entity findById(Integer id){
//Impl Jdbc
}
public void insert(Entity entity){
//JDbc impl
}
//Other CRUD operations -> Update, delete,...
}
当我回顾我的@Service
时,我清楚地看到需要重构这个类,但我不确定如何重构
我已考虑过以下选择:
- 创建一个
类
,该类按功能分组:但提取的数据太多,7个依赖项
- 组
DAO
(对于实体
,没有一个DAO
)并使SQL
更加复杂,提取更多数据,从而在只有dto
拥有的实体中的数据库引擎
具有更多功能,然后填充DAOs
层:问题转移到DAO
层
- 让类知道它有太多的依赖项
你有什么办法来改进这个问题吗 我马上建议重构DAO。听起来好像每个桌子都有一把刀。相反,尝试以更领域驱动的设计风格使DAO与业务需求保持一致。您的服务层需要“了解”太多关于数据层的信息,因此可能会不必要地与数据层耦合。我不知道,我建议重构DAO。听起来好像每个桌子都有一把刀。相反,尝试以更领域驱动的设计风格使DAO与业务需求保持一致。您的服务层需要“了解”太多关于数据层的信息,因此可能会不必要地与数据层耦合。如果您需要建议,请显示您的代码,并且,当您发布更多代码时,您可以尝试codereview.stackexchange.com。。。但这可能更多的是关于好的DDD…如果你想得到建议,请展示你的代码,也许当你发布更多的代码时,你可以试试codereview.stackexchange.com。。。但这可能更多的是关于好的DDD…请记住,您仍然可以有在表级别执行CRUD操作的DAO,但它们不一定需要在域层之外公开。您可以在内部使用它们来实现提供给服务层或UI层的外部API。请记住,您仍然可以使用在表级别执行CRUD操作的DAO,但它们不一定需要在域层之外公开。您可以在内部使用它们来实现提供给服务或UI层的外部API。
public class ServiceO{
@Autowired
private Dao1 dao1;
@Autowired
private Dao2 dao2;
//assume there are 10 daos....
public ObjectComplexDTO findObject(int id){
ObjectComplexDTO dto = mapToObjectComplexDTO(dao1.findById(id));
dto.setOtherObjects(mapToOtherObjectDto(dao2.findByCompleDto(id)));
// and so on....
return dto;
}
}