Структура пакета DAO - PullRequest
       0

Структура пакета DAO

9 голосов
/ 02 апреля 2012

Я пишу несколько простых DAO на Java с использованием JDBC (без Spring, Hibernate или чего-либо еще).

Лучше ли помещать DAO реализации в тот же пакет, что и их интерфейсы, или помещать их в подпакет?

Пример:

com.mycompany.myproject.dao.MyDao
com.mycompany.myproject.dao.MyDaoImpl

OR

com.mycompany.myproject.dao.MyDao
com.mycompany.myproject.dao.impl.MyDaoImpl

Если вы предложите структуру подпакета, что бы вы предложили в качестве имени подпакета? .impl? .SQL? .jdbc

Реально, я не собираюсь иметь несколько реализаций. Я переусердствовал в этом?

Ответы [ 4 ]

5 голосов
/ 02 апреля 2012

При разработке приложения не существует стандартного способа структурирования в пакетах, опыт - это то, что обычно помогает каждому решить, каковы подходящие имена для наших пакетов.

О реализациях пакетовВаши интерфейсы в одном и том же пакете или в другом просто подумайте о том, как структурирована сама Java: обычно класс реализации упакован в тот же пакет, что и его интерфейс, но не всегда.

Если выбыло бы несколько реализаций одного и того же DAO, тогда имело бы смысл их структурировать в подпакеты .jdbc, .jpa или .jdo.Если у вас будет только одна реализация, то оба перечисленных вами варианта имеют смысл в некотором смысле (тот же пакет или субпакет .impl).

Что касается чрезмерного проектирования, я бы порекомендовал вам это статья .Даже если у вас будет только одна реализация ваших DAO, было бы разумно определить их как интерфейс и реализацию, так как это поможет вам в будущем переписать ваши DAO для других сред, в то время как код, использующийони остаются неизменными.

В конце концов, вы (или вы и ваши коллеги) должны прийти к консенсусу и принять решение, которое имеет больше смысла в вашем конкретном случае.

РЕДАКТИРОВАТЬ

Приложение обычно имеет одну реализацию для интерфейса DAO, и это совсем не слишком сложно, просто не имеет смысла иметь один и тот же интерфейс DAO для JPA и JDO.Некоторые из целей использования шаблона интерфейса / реализации - облегчить повторный факторинг, тестирование с помощью фиктивных объектов и т. Д.

PS: я обычно полагаюсь на JDepend для распространения своихклассы приложений в пакетах, избегая циклов, как я могу.

2 голосов
/ 02 апреля 2012

Я бы выбрал второй вариант (хотя ни один из них не лучше), поскольку в импорте вы сразу увидите, импортируется ли импл, и рефакторинг будет проще, если вы захотите переместить импл в другой проект.

Это не чрезмерная инженерия.Использование DAO имеет несколько преимуществ:

  1. Это улучшает качество вашего кода, отделяя доступ к базе данных от других соображений
  2. Тестирование вашего кода стало проще, и вы можете проверить его с помощьюболее мелкое зерно.
  3. Если когда-нибудь вы обнаружите, что Hibernate на самом деле намного проще для вас, это не повлияет на остальную часть вашего кода.
2 голосов
/ 02 апреля 2012

Я не думаю, что либо лучше , но в этом случае я предпочитаю первый вариант. Это будет соответствовать наличию ArrayList, LinkedList и т. Д. В том же пакете, что и List.

При использовании дополнительных платформ, таких как hibernate, я предпочитаю второй вариант с MyDao и HibernateDao в качестве разработчика.

0 голосов
/ 02 апреля 2012

Пространства имен и пакеты существуют только для предотвращения коллизий. Ни один из них не является предпочтительным, если они уникальны.

...