在 Java 应用程序中很常见:
- 一个 IHM 层
- 服务层
- 道层
每一层都有自己的对象并依赖转换器将对象从一层转换到另一层是很常见的。
在我的例子中,我使用 Sing MVC 作为 IHM 层,MyBatis 作为 doa 层。
由于 Spring MVC 和 MyBatis 只使用 bean,而没有对该 bean 进行任何注释:
是否有必要在 3 层上有不同的对象?在 3 层之间共享同一个对象是一种好习惯吗?或者为什么不建议这样做?
在 Java 应用程序中很常见:
每一层都有自己的对象并依赖转换器将对象从一层转换到另一层是很常见的。
在我的例子中,我使用 Sing MVC 作为 IHM 层,MyBatis 作为 doa 层。
由于 Spring MVC 和 MyBatis 只使用 bean,而没有对该 bean 进行任何注释:
是否有必要在 3 层上有不同的对象?在 3 层之间共享同一个对象是一种好习惯吗?或者为什么不建议这样做?
在大多数情况下,保持层之间的完全分离是一种很好的做法。
假设您有一个名为UserDAO
保存用户数据的对象,并且在您决定更新sureName
到lastName
对象中的所有层上编写了大量代码之后,现在您必须遍历所有层并更改对该对象字段的每个引用.
另一方面,如果您将此对象保留在 DB 层并将其映射到上层的其他对象,则您需要更改的只是映射:
somObj.setUserLastName(dao.getSureName());
至:
somObj.setUserLastName(dao.getLastName());
当然这是一个愚蠢的例子,但这只是为了演示。
另一方面,在每一层上分离每个对象可能会导致大量冗余和重复,并且可能会导致维护上的恐惧,因此您需要考虑利弊,并决定在哪里最适合分离,哪里最不适合。
我曾参与过每个层都有模型的项目和具有良好领域模型的项目。
我的偏好是开发人员和架构师花时间开发它并考虑每个领域的使用的领域模型。
这种领域模型更容易维护和更新。
我记得必须向 DAO 层添加一个字段,这意味着我必须更新 3 个模型和 4 个转换器。引入错误的风险很大。尤其是如果每一层都有,例如,另一个 Date 对象的实现。(道 --> java.sql.Timestamp,服务 --> java.util.Date)。
所以我建议在所有层之间共享一个好的域模型。