Лучшая практика структуры веб-проекта Java - PullRequest
7 голосов
/ 31 января 2009

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

Так что мне любопытно узнать

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

Ответы [ 5 ]

6 голосов
/ 31 января 2009

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

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

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

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

Мое единственное хорошее предложение (которое не упоминается Yoni) для каталога 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.myproject.servlets

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

3 голосов
/ 31 января 2009

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

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

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

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

(остальное, как правило, относится к бизнес-уровню).

2 голосов
/ 23 ноября 2010
2 голосов
/ 31 января 2009

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

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

Используйте макет архетипа для веб-приложения.

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

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

...