我正在使用分层架构开发Web应用程序。我有:
连接到后端Oracle数据库。
我正在使用JPA和Hibernate作为实现。因此,我创建实体来为关系数据库表的对象视图建模。
我的问题是......在我的所有3个图层中使用这些实体对象被认为是不好的做法吗?
我知道它至少需要被数据访问层使用,但超出服务范围的是什么呢?应用层?
我见过有些人在服务中使用DTO。相反,它们在DTO和服务与实体之间的实体之间进行转换。数据访问层。
只是想知道什么是最佳做法以及最佳方法应该是什么?
答案 0 :(得分:3)
有些情况下,数据对象与用户在屏幕上操作的对象完全匹配。另一方面,存在用户根据业务逻辑处理导出和/或影响多个的对象的情况。许多报告应用程序都是后者的示例。
根据您的域和用户配置文件,匹配数据/ UI对象的频率高或低。您应该在需要时定义单独的模型,并通过项目中的更改来维护它们。因此,过度分离的模型是不好的做法。另一方面,如果您坚持在任何地方传递数据模型,那么您的业务逻辑或UI代码可能不是很干净。
将数据访问层对象与传递给用户界面的对象分开的决定也取决于使用的工具。例如,在控制器以静态方式(*)串行化为JSON的情况下,可以选择为对象图的每个不同的树遍历(将被使用)定义类。另一方面,基于JSP的UI可以使用相同的对象。
(*)杰克逊就是一个例子,它使用注释来修复对象(图形)序列化为树的方式。存在限制树的方法 - 用于防止不需要的数据泄漏 - 但是在我遇到的情况下它们的实用性和可维护性是有限的。
答案 1 :(得分:1)
绝不应在所有图层中使用实体对象。通过在所有层中使用相同的对象,您可以在UI表单数据和数据库表之间进行紧密耦合。
如果要在UI上更改字段名称,则需要修改表格中的相应列。因此,建议DTO,VO将数据从DAO传送到您的前端。使用市场上可用的不同类型的映射器。其中一个例子是orika mapper。