2013-05-03 43 views
0

我和我的团队正在构建java EE作为一个学校项目的应用程序,我们已决定使用hibernate。我们也想让整个项目尽可能地干净整洁,所以我们试图遵循推荐的约定。尽管如此,我还是无法知道,hibernate文件的约定是什么。 I.E.我有一个文件夹/cz/fit/cvut/nameofmyproject/,那里我有包controllers,models,utils。在controllers我有Spring controllers,在models我想有我的实体模型和在utils我得SessionFactoryhibernate。现在我的问题:使用休眠命名传递

我该如何命名model包中的类?应该是MyEntityNameDTO,还是我误解了DTO的含义,我应该只是将它们命名为MyEntityNameModel?什么应该是我的DAO类的文件夹的专有名称?这个简单的分区对于一个中等规模的项目(最多20个类/文件夹)是否足够了,还是会让人感到困惑?感谢您从实践:)

+1

WRT DTO /实体存在一些误解。 DTO是非实体,用于在应用程序/图层之间传输数据,或者在实体不符合概念的情况下显示数据。 DTO后缀对于DTO是合法的,entite不应该有任何后缀。 – kostja 2013-05-03 12:00:50

回答

2

UserDAO任何提示 - 接口

UserDAOImpl - 实现UserDAO的

这通常是我使用。有时像DefaultUserDAO这样的Default前缀可能会更有意义,如果你正在创建一个你希望其他人实现的接口,但你提供了参考实现。

大多数时候,我觉得这两个可以交替使用,但在某些情况下,一个比另一个提供更多的清晰度。

有迹象表明,我已经看到了两个公约:

  1. FooDao的接口和FooDaoImpl为实现

  2. IFooDao的接口和FooDao为实现

前者源于CORBA;后者是Microsoft COM/.NET约定。 (感谢Pascal进行更正)。

Hibernate提供了命名策略接口,由实现来实现。

我在这里列出几个方法。

  1. String classToTableName(String className) - 应返回实体类的表名称。
  2. String columnName(String columnName) - 用于更改映射文档中指定的列名称的句柄。
  3. String tableName(String tableName) - 用于更改映射文档中指定的列名称的句柄。
  4. String propertyToColumnName(String propertyName) - 将属性名映射到列名的句柄。
2

DTO代表数据传输对象。DTO通常是一类比真实类更多的数据结构,它通常是通过网络将信息从一层传递到另一层。它是而不是模型实体。序列化真实模型的对象时不paractical(因为结构不适合,或者因为接收器不具有访问Hibernate类,或者是因为延迟加载

甲DTO通常用于

  • 实体是一个问题)
  • 当你想转移是一个聚集,或一个复杂的视图的信息,在你的模型对象(例如像统计报告)

所以在命名实体DTO是数据不是一个好主意。 DTO和实体是不同的东西。后缀Model也很麻烦。实体其所代表的意义后,通常命名为:CustomerCompanyPlayerOrder

分离基于他们的技术角色类是经常使用的解决方案。但是,当应用程序增长时,它往往不会扩展。我通常基于功能方面(如客户管理,订单管理,安全性等)进行第一级隔离,然后根据技术方面(服务,道,型号等)进行第二级别的隔离

+0

+1正确... :) – kostja 2013-05-03 12:07:07

+0

啊所以... thx的解释...我试图了解命名传播根据我在工作中使用的后端结构(我目前工作前端程序员,所以我不太熟悉它)....我可能还没有很好地理解它:) – Dworza 2013-05-03 12:09:09