需要Java EE设计帮助

时间:2010-08-20 22:16:41

标签: java java-ee

我在我的网络应用程序中使用MVC模式。其中我有三层

  1. 控制层
  2. 经理层
  3. Dao Layer
  4. 我使用的是从控制层到马槽的DTO,然后是Dao层和相反的DTO。

    我的问题是DTO的主要目的是什么? 我可以使用DTO映射我们的关系数据库表,还是应该使用'Bean'?

    如果我在图层之间使用DTO,那么如何在对象中表示数据库表,因为图层之间的DTO可以包含与数据库表无关的属性。

4 个答案:

答案 0 :(得分:0)

使用DTO并将它们映射到数据库表没有问题。但是您必须自己进行映射(使用JDBC,Spring JDBC等)。

另一个选择是使用ORM将DTO映射到数据库。您甚至可以创建未映射到表的属性。看看JPA。

这两种选择之间的选择是个人的。第一种选择首先会更加繁重,而第二种选择则有更大的学习曲线。如果你精通SQL,我会使用JDBC。

答案 1 :(得分:0)

  

我的问题是什么是主要的   DTO的目的是什么?

DTO的主要目的是在两层之间传输数据。除了作为发货数据的篮子外,它没有真正的功能。

这就是他们称之为数据传输对象的原因。

  

我可以使用DTO来映射我们的关系   数据库表或我应该去   '豆'?

无论您决定使用JavaBean格式的访问器还是您自己的访问器,与DTO无关。转让双方必须达成一致;但是,如果您有setName(...) setter或name(...) setter,则不会影响功能。

虽然在功能意义上它可能无关紧要,但最好坚持已建立的命名约定,以便于重新访问代码,并且在培训新维护者时不会产生混淆。此外,一些库可能会假设您正在使用bean约定(或要求它们)。如果您不确定,最好坚持使用标准的JavaBean约定,因为您的新约定可能没有经过测试(或正式)。

  

如果我在图层之间使用DTO那么如何   我可以代表一个数据库表   对象,因为DTO之间的层可以   包含不属于的属性   与数据库表有关。

DTO与数据库表无关。不要让你的DTO看起来像你的数据库表,除非这是最自然的事情。

答案 2 :(得分:0)

DTO的主要目的是减少跨层传输数据的开销。

如果您没有DTO,那么您将拥有一个包含数据的逻辑类以及将跨层传递的逻辑。使用DTO确保您只传递所需的内容,即跨层的数据。

当然,您可以选择将DTO映射到数据库表,并使bean设计更接近地表示域对象。 这是一种做法。

相反,根据您的数据库设计,您的DTO可能更符合您的实际业务实体 - 只是没有逻辑

答案 3 :(得分:0)

  

我的问题是什么是主要的   DTO的目的是什么?

与扩展(数据传输对象)意味着,DTO旨在跨各层传输结构化数据。 DTO使您能够解耦表示数据的协议特定实现,以便在跨层通信之前抽取来自不同源的数据。

例如,DTO允许您将HttpServletRequest对象中存在的数据与其内部存储器分离,以便您可以将数据发送到业务逻辑层中的服务。这同样适用于用于抽象从SQL查询获得并驻留在ResultSet对象中的结果的DTO。简而言之,DTO允许您在不保留源的情况下传输数据 - 您可以在处理数据时忘记HTTP响应和JDBC连接。

  

我可以使用DTO来映射我们的关系   数据库表或我应该去   '豆'?

您可以采用第二种使用Beans的方法。事实上,使用JPA,您根本不需要DTO。 JPA托管bean本身代表各种表中的数据,可以从数据库状态解除链接,以便您可以将它们用于数据传输。

  

如果我在图层之间使用DTO那么如何   我可以代表一个数据库表   对象,因为DTO之间的层可以   包含不属于的属性   与数据库表有关。

这取决于您希望如何将DTO与数据库表耦合。最好在DTO和数据库表之间具有一对一映射,并选择另一个DTO以传输与该表无关的属性。毕竟,像所有其他对象一样的DTO应该只有一个责任。如果责任是反映数据库表,那么它应该包含其他“不相关”的属性。

为了扩展在此上下文中使用JPA的建议,在JPA实体中具有不相关的属性是不好的设计,尤其是当该不相关的属性应该被标记为瞬态并且不对实体的行为添加任何值时。