在 Web 应用程序的所有层中使用实体对象是一种不好的做法吗?
Is it bad practice to use entity objects across all layers of a web application?
我正在使用分层架构开发 Web 应用程序。我有:
- 应用层(控制器)
- 服务层(Services)
- 数据访问层 (DAO)
连接到后端 Oracle 数据库。
我正在使用 JPA 和 Hibernate 作为实现。因此,我创建实体来为我的关系数据库表的对象视图建模。
我的问题是...在我的所有 3 个层中使用这些实体对象是否被认为是不好的做法?
我知道它至少需要被数据访问层使用,但在服务层和应用层之外呢?
我看到有人在服务层和应用层使用 DTO,他们在服务层和数据访问层之间进行 DTO 和实体之间的转换。
只是想知道对此的最佳做法是什么以及最佳方法应该是什么?
你不应该在所有层中使用你的实体对象。通过在所有层中使用相同的对象,您可以在 UI 表单数据和数据库 tables.
之间实现紧密耦合
如果要更改UI中的字段名称,则需要修改table中的相应列。因此,建议 DTO、VO 将数据从 DAO 传送到您的前端。使用市场上可用的不同类型的映射器。例子之一是 orika mapper。
在某些情况下,数据对象与用户在屏幕上操作的对象完全匹配。另一方面,在某些情况下,用户根据业务逻辑处理派生 and/or 影响多个对象的对象。许多报告应用程序都是后者的例子。
根据您的域和用户配置文件,匹配 data/UI 对象案例的频率有高有低。您应该在需要时定义单独的模型,并且通过项目更改来维护它们的成本。因此,过度分离的模型是不好的做法。另一方面,如果您坚持到处传递数据模型,您的业务逻辑或 UI 代码可能不是很干净。
将数据访问层对象与传递给用户界面的对象分开的决定还取决于所使用的工具。例如,在控制器以静态方式 (*) 序列化为 JSON 的情况下,可以选择为对象图的每个不同的树遍历(要使用)定义 类。另一方面,相同的对象可能可用于基于 JSP 的 UI.
(*) jackson 就是一个例子,它使用注释来固定对象(图形)序列化为树的方式。存在限制树的方法 - 有助于防止不必要的数据泄漏 - 但是在我遇到的情况下,它们的实用性和可维护性是有限的。
我正在使用分层架构开发 Web 应用程序。我有:
- 应用层(控制器)
- 服务层(Services)
- 数据访问层 (DAO)
连接到后端 Oracle 数据库。
我正在使用 JPA 和 Hibernate 作为实现。因此,我创建实体来为我的关系数据库表的对象视图建模。
我的问题是...在我的所有 3 个层中使用这些实体对象是否被认为是不好的做法?
我知道它至少需要被数据访问层使用,但在服务层和应用层之外呢?
我看到有人在服务层和应用层使用 DTO,他们在服务层和数据访问层之间进行 DTO 和实体之间的转换。
只是想知道对此的最佳做法是什么以及最佳方法应该是什么?
你不应该在所有层中使用你的实体对象。通过在所有层中使用相同的对象,您可以在 UI 表单数据和数据库 tables.
之间实现紧密耦合如果要更改UI中的字段名称,则需要修改table中的相应列。因此,建议 DTO、VO 将数据从 DAO 传送到您的前端。使用市场上可用的不同类型的映射器。例子之一是 orika mapper。
在某些情况下,数据对象与用户在屏幕上操作的对象完全匹配。另一方面,在某些情况下,用户根据业务逻辑处理派生 and/or 影响多个对象的对象。许多报告应用程序都是后者的例子。
根据您的域和用户配置文件,匹配 data/UI 对象案例的频率有高有低。您应该在需要时定义单独的模型,并且通过项目更改来维护它们的成本。因此,过度分离的模型是不好的做法。另一方面,如果您坚持到处传递数据模型,您的业务逻辑或 UI 代码可能不是很干净。
将数据访问层对象与传递给用户界面的对象分开的决定还取决于所使用的工具。例如,在控制器以静态方式 (*) 序列化为 JSON 的情况下,可以选择为对象图的每个不同的树遍历(要使用)定义 类。另一方面,相同的对象可能可用于基于 JSP 的 UI.
(*) jackson 就是一个例子,它使用注释来固定对象(图形)序列化为树的方式。存在限制树的方法 - 有助于防止不必要的数据泄漏 - 但是在我遇到的情况下,它们的实用性和可维护性是有限的。