使用hibernate时的命名约定

时间:2013-05-03 11:43:50

标签: java hibernate naming-conventions

我和我的团队正在构建java EE app作为学校项目,我们决定使用hibernate。我们还想让整个项目尽可能干净整洁,所以我们试图遵循推荐的约定。然而,我无法找到hibernate文件的约定。 I.E.我有一个文件夹/cz/fit/cvut/nameofmyproject/,我有包controllersmodelsutils。在controllers我有Spring controllers,在models我希望为我的实体设置模型,在utilsSessionFactory hibernate }}。现在我的问题是:

如何命名model包中的类?应该是MyEntityNameDTO,还是我误解了DTO的含义,我应该将它们命名为MyEntityNameModel?什么应该是我的DAO类的文件夹的正确名称?对于中型项目(最多20个类/文件夹),这个简单的划分是否足够,还是会让人感到困惑?感谢praxis的任何提示:)

2 个答案:

答案 0 :(得分:2)

UserDAO - 界面

UserDAOImpl - 实施UserDAO

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

大多数时候我觉得这两种语言可以互换使用,但在某些情况下,一种语言比另一种语言更清晰。

我见过两种惯例:

  1. FooDao用于接口,FooDaoImpl用于实现

  2. IFooDao用于接口,FooDao用于实现

  3. 前者源于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) - 将属性名映射到列名的句柄。

答案 1 :(得分:2)

DTO代表数据传输对象。 DTO通常是一个比真实类更多的数据结构的类,它被创建用于将信息从一个层传输到另一个层,通常是通过网络传输。它是模型实体。

经常使用DTO

  • 序列化真实模型对象时不实用(因为结构不适合,或者因为接收者无法访问Hibernate类,或者因为延迟加载的实体是个问题)
  • 当您想要在模型对象上传输作为聚合或复杂视图的信息时(例如统计报告的数据)

因此,命名您的实体DTO不是一个好主意。 DTO和实体是不同的东西。 Model后缀也很麻烦。实体通常以其代表的名称命名:CustomerCompanyPlayerOrder等。

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