【问题标题】:java type conversion between layers层之间的java类型转换
【发布时间】:2012-07-16 12:24:24
【问题描述】:

在 Java 应用程序中很常见:

  • IHM 层
  • 一个服务层
  • 道层

每一层都有自己的对象并依赖转换器将对象从一层转换到另一层是很常见的。

在我的例子中,我使用 Sing MVC 作为 IHM 层,MyBatis 作为 doa 层。

由于 Spring MVC 和 MyBatis 只使用 bean,没有对该 bean 进行任何注释:

有必要在 3 层上有不同​​的对象吗? 在 3 层之间共享同一个对象是一种好习惯吗? 或者为什么不建议这样做?

【问题讨论】:

    标签: java type-conversion layer


    【解决方案1】:

    在大多数情况下,保持层之间完全分离是一种很好的做法。

    假设您有一个名为 UserDAO 的对象来保存用户数据,在所有层上编写了大量代码后,您决定将对象中的 sureName 更新为 lastName,现在您必须离开遍历所有层并更改对该对象字段的每个引用。

    另一方面,如果您将此对象保留在 DB 层并将其映射到上层的其他对象,则您只需更改映射即可:

    somObj.setUserLastName(dao.getSureName());
    

    到:

    somObj.setUserLastName(dao.getLastName());
    

    当然这是一个愚蠢的例子,但这只是为了演示。

    另一方面,在每一层上分离每个对象可能会导致大量冗余和重复,并且可能会变成维护恐惧,因此您需要考虑利弊,并决定在哪里最适合分离和哪里没有。

    【讨论】:

    • 你说得对,我曾经做过一个项目,花了很多时间在层之间编写转换器……真是一场噩梦!
    • 有一种使用反射编写动态映射器的方法,但它并不容易编写,并且可能会影响性能。
    【解决方案2】:

    我参与过每个层都有模型的项目和具有良好领域模型的项目。

    我更喜欢开发人员和架构师花时间开发并考虑每个领域的用途的领域模型。
    这种领域模型更容易维护和更新。

    我记得必须向 DAO 层添加一个字段,这意味着我必须更新 3 个模型和 4 个转换器。引入错误的风险很大。尤其是如果每一层都有,例如,另一个 Date 对象的实现。 (Dao --> java.sql.Timestamp, Service --> java.util.Date)。

    所以我建议在所有层之间共享一个好的域模型。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2019-05-01
      • 1970-01-01
      • 1970-01-01
      • 2011-08-18
      • 2012-11-02
      • 1970-01-01
      • 2015-11-11
      相关资源
      最近更新 更多