2012-07-16 96 views
1

这是常见的Java应用程序中有:Java类型转换

  • 一个IHM层
  • 服务层
  • 一个DAO层

这是常见的每一层有它自己的对象,并依靠转换器将对象从一个图层转换到另一个图层。

在我的情况下,我使用Sing MVC作为IHM层,MyBatis作为doa层。

由于Spring MVC和MyBatis的上豆只使用豆类,没有任何注解:

是否有必要对3层型动物的对象? 在3层之间共享同一个对象是否是一种很好的做法? 或为什么不建议这样做?

回答

2

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

比方说你有一个名为UserDAO对象保存用户数据,并写了很多的代码在所有图层后,您决定更新sureNamelastName的对象,现在你必须要经过所有层,并更改对该对象字段的每个引用。

在另一方面,如果保持在DB层上该对象并将其映射到其他的物体上的上层,你只需要改变的是映射:

somObj.setUserLastName(dao.getSureName()); 

到:

somObj.setUserLastName(dao.getLastName()); 

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

另一方面,分离每一层上的每个对象可能会导致很多重复和重复,并且可能会变成维护恐怖,因此您需要考虑利弊并决定哪里最适合单独使用不在哪里。

+0

你是对的,我曾经在一个项目上花费了很多时间来编写图层之间的转换器......多么噩梦! – fluminis 2012-07-16 12:48:46

+0

有一种使用反射编写动态映射器的方法,但写起来并不容易,可能会影响性能。 – Tomer 2012-07-16 12:55:35

0

我曾在两个项目中都有一个模型,每个图层和项目都有一个好的域模型。

我喜欢的是一个领域模型,开发人员和架构师花时间去开发它并思考每个领域的使用。
这种域模型更容易维护和更新。

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

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