我正在开发一个包含Spring Framework
(Spring Boot
)和JDBC
(无JPA
或ORM
)的网络应用程序,因此我可以使用Dependency Injection
通过图层使用Beans
该结构由三个主要层组成:DB(DAO),服务和控制器。 DAOs
注入其他DAOs
或Service layer
和Services
其他Services
和Controller Layer
。
我的Database layer
由一个DAO
组成,用于数据库的每个表。每个DAO
都有一般CRUD
,并根据需要进行一些具体操作。总共我有超过10张桌子(可能近15张)。
DAO的例子
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 layer
我将Entities
(数据库对象)映射到DTos
(数据访问对象)。
我有一个@Service
类需要注入过多的数据访问对象依赖项(10个依赖项)。
为什么呢?我有一个复杂的DTO
类,需要填写每个entity
的一些数据(使用DAOs
)并执行一些操作(Update
,{ {1}},insert
....
服务示例
delete.
当我查看我的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;
}
}
时,我清楚地看到它需要重构这个课程,但我不确定如何。
我考虑过以下几种选择:
@Service
按功能分组:但提取数据仍然太多,7依赖... Class
(DAOs
不只有一个DAO
)和更复杂Entity
并提取更多数据,为SQL
提供更多功能Database Engine
只有Entities
已填充DTOs
图层的DAOs
数据:问题已移至图层DAO
... 您有什么想法来改善这个问题吗?
答案 0 :(得分:4)
在我的头脑中,我建议重构你的DAO。听起来你每桌有一个DAO。相反,尝试以更加领域驱动的设计风格使您的DAO与业务需求保持一致。您的服务层需要“了解”过多的数据层,因此可能会不必要地与之相关联。