【发布时间】:2015-12-19 02:38:51
【问题描述】:
首先,很抱歉,如果这个主题已经被处理,但我没有找到我真正想要的东西。 我正在开发 ERP,我们正在尝试对代码进行一些重构。主要问题是我们目前不使用任何 DAO 模式,如果我们需要以不同的方式访问“数据库”,这可能会成为未来的问题。
简而言之,我们的架构将针对这种模式:
Bean 或 Web 服务称为我们所说的“事务层”(封装服务,以便可以通过 WS 公开某些内容并执行其他操作)。该层调用服务,这将调用其他服务或 DAO。
1) 实体
public class MyObject{
private String arg1;
private List<SomeOtherObject> arg2List;
}
2) DAO
public interface MyObjectDAO {
void save();
List<MyObject> findAllObjects();
// Some other queries
// ...
}
3) 我的对象服务
@Service
public class MyObjectService{
@Autowired
MyObjectDAO dao;
@Autowired
MyOtherObjectDAO otherDao;
public void createObject(String arg1Dto, List<MyOtherObjectDto> arg2Dto){
// How to deal with arg 2 ?
MyObject obj = new MyObject();
obj.setArg1(arg1);
obj.setArg2(myEntityRepresentingArg2);
dao.save(obj1);
}
}
3) 交易层
public class{
// Many many things...
//Method called from the Beans
@Transactional(rollbackFor=Exception.class)
public void serviceCall(SomeDto arguments){
myObjectServices.createObject(arguments.getArg1(), arguments.getArg2());
}
}
我的问题是关于最佳实践的:
首先,我们使用 Hibernate 和 JPARepository 来管理实体。所以我猜对存储库的调用应该在 DAOImpls 中完成?我们对数据库进行的查询(即带有连接、选择等的 JPAQuery)和投影呢?这样 DAO 就会返回 DTO...
我们也不确定在哪里使用 DTO。在“事务层”中使用 DTO 与 DAO 中的实体之间应该有什么界限?是否应该将 DTO 传递给服务类,然后将实体完全传递给 DAO 层?或者我们应该只将参数传递给 DAO,然后它自己创建实体(问题是它会导致一些巨大的方法签名)。
非常感谢,如有需要,请随时提出问题!
【问题讨论】:
标签: hibernate jpa service dao dto