什么是HibernateUtil类的通用名称?

时间:2010-09-02 08:22:41

标签: java hibernate refactoring naming-conventions

我有一个HibernateUtil类,它是本书(Hibernate in action)类的标准 它获得一个会话,刷新并关闭它。开始,提交和回滚事务并构建sessionFactory 目前,错误的是,我们的包中称为HibernateSessionFactory 我想把它重构为一个更合适的名字,但HibernateUtil这个名字让我感到困扰,因为我想选择一个更通用的名字,如PersistentManagerUtil
关于这样的名字有一个很好的java约定或共识吗?

修改 我想让它更通用的原因是我想尽量减少特定ORM实现的“曝光”。该类的大多数公共方法都具有void作为返回类型,因此它们不返回Hibernate类/接口。唯一的例外是getSession,它返回一个org.hibernate.Session。我之所以考虑这个方向,是因为我想切换到JPA并将hibernate作为实现,所以有更多的自由。 为什么不将其更改为EntityManagerUtil?就像在hibernate的文档中一样,他们说EntityManager与Session是同等的,并且EntityManagerFactory与HibernateSessionFactory等效。

提前致谢,
Ittai

2 个答案:

答案 0 :(得分:2)

不要让它更通用,除非该类除了与Hibernate交谈之外还可以做任何事情。它在公共API中使用Hibernate类和接口,对吗?只要它是特定于Hibernate的(在接口和实现中),最好让每个人都知道它的名字。

HibernateUtil听起来不错。

  

该类的大多数公共方法都具有void作为返回类型,因此它们不返回Hibernate类/接口。唯一的例外是getSession,它返回一个org.hibernate.Session。我之所以考虑这个方向,是因为我想切换到JPA并将hibernate作为实现,所以有更多的自由。

嗯,您可以在取消JpaUtil后将名称更改为getSession

答案 1 :(得分:0)

你的课程是特定于Hibernate的,因此以其名义拥有它是件好事。

它会创建会话,还是从其他地方获取?如果它创造了它们,工厂也是一个好名字。如果没有,听起来它管理Sessions,那么'HibernateSessionManager'怎么样?

你的名字'HibernateUtil'是否过于笼统。我总是把'util'包和类作为代码气味;他们通常会弹出,因为设计师有一堆他/她不知道放在哪里的东西。你的课不是那样的,它显然专注于hibernate会话的管理。

关于您关于命名的现有约定或共识的问题。有一些指导原则(但你可能已经知道了):

  • 方法应反映对它们所在类的操作,并且如果可能,应具有逻辑参数顺序。示例:ChessBoard.swapPlayers(播放器a,播放器b)
  • 返回布尔值的方法使用像isActivated或hasPlayers
  • 这样的谓词
  • 另一种风格是方法链,其中链式方法读取有点像英语句子:verify(mockedList,atLeastOnce())。add(“three times”); (mockito
  • 关于方法的JavaDoc应该描述这个动作,例如:交换玩家A和B,以便他们继续游戏,彼此分开“。
  • 课程应该代表一个有明确责任的“事物”。示例:StringBuilder,Customer,PdfServlet。如果次要责任蔓延到一个类,这通常意味着它应该被重构为两个合作类。
  • 关于类的JavaDoc应描述“事物”及其主要责任。应该描述行为,因为它对于客户来说是有价值的信息。通常不应在公共JavaDoc中描述实现细节。

哦,是的,我碰巧认为命名对于良好的软件设计非常重要。但我想这已经很清楚了( - :

编辑:回复您的编辑。只要它返回一个Hibernate类型,它仍然是Hibernate特有的。如果你设法完全从Hibernate抽象出来,转向JPA,那么将它命名为JpaSessionManager(或者你喜欢的是JPASessionManager)是有意义的。但这需要返回仅JPA会话对象。