Какая хорошая альтернатива, общее имя классу HibernateUtil? - PullRequest
0 голосов
/ 02 сентября 2010

У меня есть класс HibernateUtil, который является стандартным для класса книги (Hibernate in action).
Он получает сеанс, сбрасывает и закрывает его. начинает, фиксирует и откатывает транзакции и создает sessionFactory.
В настоящее время по ошибке это называется HibernateSessionFactory в нашем пакете.
Я хочу изменить его на более подходящее имя, но имя HibernateUtil беспокоит меня, так как я хотел бы выбрать более общее имя, например, PersistentManagerUtil.
Есть ли хорошее соглашение Java или консенсус по поводу такого названия?

EDIT Причина, по которой я хочу сделать это более общим, заключается в том, что я хочу минимизировать «Экспозицию» для конкретной реализации ORM. Большинство открытых методов класса имеют void в качестве возвращаемого типа, поэтому они не возвращают классы / интерфейсы Hibernate. Единственным исключением является getSession, который возвращает org.hibernate.Session. Причина, по которой я думал об этом направлении, заключается в том, что я хочу переключиться на JPA и использовать hibernate в качестве реализации, и поэтому имею немного больше свободы. Почему бы не изменить его на EntityManagerUtil? Как и в документах hibernate, они говорят, что EntityManager равнозначен Session, а EntityManagerFactory равнозначен HibernateSessionFactory.

Заранее спасибо,
Итай

Ответы [ 2 ]

2 голосов
/ 02 сентября 2010

Не делайте это более общим, если только класс не может сделать что-то кроме разговора с Hibernate.Он использует классы и интерфейсы Hibernate в своем публичном API, верно?Пока он специфичен для Hibernate (как по интерфейсу, так и по реализации), было бы хорошо, чтобы все знали об этом от его имени.

HibernateUtil звучит хорошо.

Большинство открытых методов класса имеют тип возврата void, поэтому они не возвращают классы / интерфейсы Hibernate.Единственным исключением является getSession, который возвращает org.hibernate.Session.Причина, по которой я думал об этом направлении, заключается в том, что я хочу переключиться на JPA и использовать hibernate в качестве реализации, поэтому у меня немного больше свободы.

Что ж, вы можете изменить имя на JpaUtilкак только ты избавился от getSession.

0 голосов
/ 02 сентября 2010

Ваш класс специфичен для Hibernate, поэтому хорошо иметь его в своем названии.

Создает ли он сеансы или получает их откуда-то еще?Если это создает их, Фабрика также хорошее имя.Если нет, то похоже, что он управляет сессиями, так как насчет 'HibernateSessionManager'?

Ваше имя 'HibernateUtil' во всяком случае слишком общее.Я всегда принимаю 'util' пакеты и классы как запах кода;они обычно появляются, потому что у дизайнера было множество вещей, которые он / она не знал, куда положить.Ваш класс не такой, очевидно, он фокусируется на управлении сессиями гибернации.

Что касается вашего вопроса о существующих соглашениях или консенсусе по поводу именования.Есть некоторые рекомендации (но вы, вероятно, уже знаете их):

  • методы должны отражать действие в классе, в котором они находятся, и, если возможно, иметь логический порядок аргументов.Пример: ChessBoard.swapPlayers (Player a, Player b)
  • для методов, возвращающих логическое значение, используйте предикат наподобие isActivation или hasPlayers
  • другой стиль - это сцепление методов, где цепочечные методы читаются немного какпредложение на английском языке: verify (mockedList, atLeastOnce ()). add ("три раза");( mockito )
  • JavaDoc для методов должен описывать действие, например: поменять местами игроков A и B, чтобы они продолжили игру с фигурами друг друга ".
  • классы должны представлять «вещь» с четкой ответственностью. Примеры: StringBuilder, Customer, PdfServlet. Если вторичная ответственность переходит в класс, это обычно означает, что ее следует реорганизовать в два сотрудничающих класса.
  • JavaDoc onклассы должны описывать «вещь» и ее основную ответственность. Поведение должно быть описано, если это ценная информация для клиента. Детали реализации обычно не должны описываться в общедоступном JavaDoc.

О, да, иМне кажется, что наименование чрезвычайно важно для хорошего проектирования программного обеспечения. Но я думаю, что это уже было ясно (-:

РЕДАКТИРОВАТЬ: в ответ на ваше редактирование. Пока оно возвращает тип Hibernate, оно все еще Hibernateконкретный. Если вам удастся полностью абстрагироваться от Hibernate, в сторону JPA, тогда было бы целесообразно назвать его JpaSessionManager (или JPASessionManager, если вы предпочитаете), например.Но для этого потребуется вернуть объект сеанса только для JPA.

...