Pergunta

Estou iniciando um novo projeto da Web Java que está usando o Hibernate e uma arquitetura MVC padrão. Acabei de começar a layout a estrutura dos projetos e, ao fazer isso, comecei a olhar em volta para ver se havia algum padrão nessa área, sobre onde os controladores deveriam ir e geralmente a melhor maneira de estabelecer tudo. No entanto, eu realmente não encontrei nenhuma diretriz.

Então, o que estou curioso para saber é

  • Alguém está ciente de alguma diretrizes de melhores práticas para o layout de um projeto da Web Java?
  • Alguém tem um conjunto específico de regras difíceis que sempre seguem para diferentes tipos de projeto?
  • As pessoas tendem a dividir pacotes de diferentes camadas, como apresentação, negócios e aplicação?
Foi útil?

Solução

Para continuar minha resposta anterior, tenho muitos projetos da Web. Em todos eles, a estrutura sob SRC é mais ou menos a mesma. Os pacotes são separados aproximadamente para 3 camadas lógicas.

Primeiro, é a camada de apresentação, como você disse, para servlets, ouvintes de aplicativos e ajudantes.

Segundo, existe uma camada para a camada de acesso ao modelo/dB de hibernato. A terceira camada para a lógica de negócios. No entanto, às vezes o limite entre essas camadas não é claro. Se você estiver usando o Hibernate para acesso a DB, o modelo será definido pelas classes de hibernato, então eu as coloquei na mesma área que os objetos DAO. Por exemplo, com.sample.model detém os objetos de dados do hibernato e com.sample.model.dao seguram os objetos DAO.

Se estiver usando o JDBC reto (geralmente com a primavera), às vezes acho mais conveniente colocar os objetos de dados mais perto da camada lógica de negócios, e não com a camada de acesso a banco de dados.

(O restante das coisas normalmente se enquadra na camada de negócios).

Outras dicas

Realmente depende da sua estrutura da web.

Por exemplo, se você usar o wicket, os arquivos Java e as páginas da web coexistem no mesmo diretório, enquanto na maioria das outras estruturas, páginas (arquivos .jsp ou qualquer que seja o seu mecanismo de apresentação) e coisas de código-behind (arquivos java) estão completamente separados.

Portanto, leia a documentação que acompanha sua estrutura (MVC da primavera, struts, JSF etc).

Outra boa proposta é usar arquétipos Maven para gerar um esqueleto para sua estrutura específica. Algumas estruturas da web (como costura) têm até sua própria ferramenta de geração de código que estabelece as fundações para o seu projeto da Web.

Minha única boa sugestão (que não é mencionada por Yoni) para o diretório SRC é fazer pacotes de acordo com a finalidade comercial e não de acordo com o tipo/camada

Isso significa pacotes para

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

e não

  • com.mycompany.myProject.entities
  • com.mycompany.myProject.tables
  • com.mycompany.myproject.graphs
  • com.mycompany.myProject.dialogs
  • com.mycompany.myProject.servlets

A segunda estrutura é muito genérica, tende a resolver em torno de enormes pacotes com coisas não relacionadas e é difícil de manter.

Primeiro, a estrutura convencional de um IDE popular, ala eclipse, netbeans etc. no eclipse, por exemplo, tudo já está organizado com pastas Web-Inf e Meta-Inf, para que a embalagem e a implantação sejam fáceis. O código-fonte das classes (normalmente no SRC) é copiado automaticamente para Web-Inf/Classes. Existem algumas outras considerações:

  1. Se você estiver usando o MVC, é possível que você não precise acessar seus JSPs diretamente. Nesse caso, mantenha o código-fonte do JSP em Web-Inf/JSP, por razões de segurança.
  2. Da mesma forma, mantenha os arquivos de tag personalizados em Web-Inf/Tags.
  3. Mantenha os arquivos JavaScript na pasta JS, arquivos CSS em pasta de estilo, etc. Todas as pastas devem estar no mesmo nível que a Web-Inf para imitar uma implantação real.
  4. É bom separar seu código em pacotes de acordo com as camadas. Obviamente, seus DAOs de hibernato não precisam estar no mesmo pacote que seus servlets.
  5. Se você acabar com muitos servlets no mesmo pacote, considere subcate -os de acordo com a funcionalidade, mas é bom que eles tenham um pacote ancestral comum - isso ajuda na legibilidade.

Use o Layout do arquétipo da WebApp do Maven.

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

Eu incluí o java Pasta no exemplo aqui, talvez fosse óbvio, mas foi deixado de fora no link acima por algum motivo.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top