2009-01-31 2 views
7

Я начинаю новый Java Web Project, который использует Hibernate и стандартную архитектуру MVC. Я только начал планировать структуру проектов, и, делая это, я начал осматриваться, чтобы узнать, есть ли в этой области какие-либо стандарты, о том, куда должны идти контроллеры, и вообще лучший способ выложить все. Однако я не нашел никаких рекомендаций.Структура Java Web Project Лучшая практика

Так что мне интересно знать

  • Кто-нибудь известно о каких-либо лучших практических руководств для макета в Java Web Project?
  • У кого-нибудь есть определенный набор жестких правил, которые они всегда соблюдают для разных типов проектов?
  • Люди склонны разбивать пакеты на различные слои, такие как презентация, бизнес и приложение?

ответ

3

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

Первый слой презентации, как вы сказали, для сервлетов, прослушивателей приложений и помощников.

Во-вторых, имеется слой для уровня доступа к спящей модели/db. Третий уровень для бизнес-логики. Однако иногда граница между этими слоями неясна. Если вы используете hibernate для доступа к db, тогда модель определяется классами спящего режима, поэтому я помещаю их в ту же область, что и объекты dao. Например. com.sample.model содержит объекты данных спящего режима и com.sample.model.dao содержит объекты dao.

Если вы используете прямой jdbc (обычно с Spring), то иногда мне удобнее размещать объекты данных ближе к слою бизнес-логики, а не с уровнем доступа db.

(Остальная часть материала обычно относится к бизнес-слою).

2

Во-первых, следовать обычной конструкции популярного язь, ала Eclipse, Netbeans и т.д. В Eclipse, к примеру, все уже договорено с WEB-INF и META-INF папки, так что упаковка и развертывание простое. Исходный код классов (обычно под src) автоматически копируется в WEB-INF/classes. Есть несколько других соображений:

  1. Если вы используете MVC, то вполне возможно, что вам не нужно, чтобы получить доступ к JSP-страницы непосредственно. Если это так, сохраните исходный код JSP под WEB-INF/jsp по соображениям безопасности.
  2. Аналогичным образом сохраните файлы пользовательских тегов под WEB-INF/тегами.
  3. Храните файлы javascript в папке js, css-файлах в папке стиля и т. Д. Все папки должны находиться на том же уровне, что и WEB-INF, чтобы имитировать реальное развертывание.
  4. Хорошо разделить ваш код на пакеты в соответствии со слоями. Очевидно, что ваши Hibernate daos не должны быть в том же пакете, что и ваши сервлеты.
  5. Если у вас слишком много сервлетов в одном пакете, подумайте о том, чтобы их упаковка была совместима с функциональностью, но приятно, что у них есть общий пакет предков - он помогает с удобочитаемостью.
+0

Я предпочитаю WEB-INF/content или WEB-INF/view, кто знает, что может быть или может быть презентационной технологией ... –

+0

правильно, спасибо, что указали это. Пока они хранятся под WEB-INF ... – Yoni

+0

Некоторые хорошие моменты там Yoni. Тем не менее, мне все еще интересно мнение людей о том, как, в частности, каталог src должен быть структурирован с помощью пакетов, иначе сервлеты будут помещены в пакет с именем presentation, поскольку они в основном содержат контент JSP. –

6

Это действительно зависит от вашего веб-фрейма.

Например, если вы используете Wicket, Java-файлы и веб-страницы сосуществует в том же каталоге, в то время как в большинстве других структур, страницах (.jsp файлы или все, что ваша презентация двигатель) и код за вещами (Java файлы) полностью разделены.

Так что прочитайте документацию, прилагаемую к вашей структуре (Spring MVC, Struts, JSF e.t.c).

Другим хорошим предложением является использование архетипов Maven для создания скелета для вашей конкретной структуры. Некоторые веб-фреймворки (например, шов) имеют даже свой собственный инструмент генерации кода, который закладывает основы вашего веб-проекта.

Мое единственное хорошее предложение (что не упоминается Йони) для каталога Src является сделать пакеты в соответствии с бизнес-цели, а не в зависимости от типа/слой

Это означает, что пакеты для

  • com.mycompany.myproject.customers
  • com.mycompany.myproject.departments
  • com.mycompany.myproject.billing
  • com.mycompany.myproject.reports
  • com.mycompany.myproject.admin

и НЕ

  • com.mycompany.myproject.entities
  • com.mycompany.myproject.tables
  • com.mycompany.myproject.graphs
  • com.mycompany.myproject.dialogs
  • com.mycompany.myproje ct.servlets

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

+0

@kazanaki К сожалению, в этом проекте я просто использую простой MVC, без рамки. У меня уже есть каталог src, структурированный в соответствии с правилами maven. С вашей компоновкой пакетов вы добавляете субпакет, который на всех уровнях, или просто переходите к вспомогательным целям. –

+0

Подделки @Mark - это слои. В качестве примера я даю клиентам клиенты. Действия, customers.servlets, customers.entities e.t.c. Но в действительно большом проекте субпакеты могут быть вспомогательными, как вы говорите. Нет правильного ответа там ИМХО – kazanaki

0

Используйте Maven webapp archetype layout.

project 
|-- pom.xml 
`-- src 
    `-- main 
     |-- java 
     `-- webapp 
      |-- WEB-INF 
      | `-- web.xml 
      `-- index.jsp 

Я включил java папку в примере здесь, может быть, это было очевидно, но он был оставлен в ссылке выше для некоторая причина.

Смежные вопросы