Eu implementei um aplicativo de n camadas com o MVC corretament

or não estar familiarizado com os padrões de design e a arquitetura, estou tendo problemas para explicar aos outros exatamente como meu aplicativo mais recente foi projetado. Alternei entre pensar que é um MVC puro, um n-nível puro e um n-nível com o MVC na camada de apresentação. Atualmente, acho que o último está correto, mas quero pensamentos de desenvolvedores mais experiente

Como funciona @Browser envia uma solicitação HTTP para o Tomcat. Mapeia a solicitação via web.xml para um servlet (que eu chamo de controlador) O controlador instancia um ou mais objetos de negócios e chama métodos sobre eles, ou seja,customerBO.getById(12), que novamente executará a lógica / validação de negócios antes de chamar um ou mais métodos DAO, ou seja,customerDAO.getById(12). O BO retorna uma lista de CustomerVO para o controladorO controlador prepara atributos para a visualização (JSP) request.setAttribute("customers", customers);) e escolhe um arquivo .jsp a ser usado, que por sua vez iterará a lista e renderizará o XHTML novamente no navegado Estrutura (minha proposta / entendimento)

Apresentação tier: atualmente usando o que eu acho que é uma implementação da Web MVC: servlets (controladores), jsp (visualizações) e minha própria implementação de formulários OO XHTML (ou seja, CustomerForm) está aqui. Deve ser possível usar uma GUI Swing / JavaFX / Flex alternando essa camada de apresentação e sem a necessidade de alterar nada nas camadas abaix

Logic tier: Dividido em duas camadas, com Business Objects (BO) na parte superior. Responsável pela lógica comercial, mas não encontrei muito o que colocar aqui além da validação de entrada, pois o aplicativo consiste principalmente em ações CRUD simples ... Em muitos casos, os métodos chamam um método com o mesmo nome na camada DA

lasses @DAO com métodos CRUD, que novamente entram em contato com a camada de dados abaixo. Também possui métodos convertToVO (ResultSet res) que executam ORM do banco de dados e em (listas de) objetos de valor. Todos os métodos recebem objetos de valor como entrada, ou seja, customerDAO-> save (eleitor) e retornam o eleitor atualizado com êxito e nulo com falha.

Data tier: Na parte inferior, os dados são armazenados em um banco de dados ou como arquivos XML. Eu não "codifiquei" nada aqui, exceto alguns procedimentos armazenados do MySQL e gatilho

Questões (além da do título):O M no MVC. Não tenho certeza se posso chamar esse MVC de n camadas quando os modelos são retornados por listas / VOs de objetos de negócios na camada lógica. Os modelos precisam residir na camada de apresentação quando o controlador / visualização estiver aqui? E os modelos de formulário na camada de apresentação podem ser chamados de modelos? Se então; os formulários e as listas do BO devem ser considerados como o M no MVC? Pelo meu entendimento, no MVC, a visualização deve observar o modelo e a atualização sobre as alterações, mas isso não é possível em um aplicativo da Web em que a visualização é uma página XHTML renderizada? Por sua vez, isso me leva à pergunta: o MVC é implementado de maneira diferente para aplicativos da Web e aplicativos de desktop comuns? Não estou usando um padrão Front Controller quando todas as solicitações HTTP são explicitamente mapeadas no web.xml, certo? Para usar o Front Controller, preciso encaminhar todas as solicitações para um servlet / controlador padrão que, por sua vez, avalia a solicitação e chama outro controlador? A camada de negócios parecia um pouco "inútil" no meu aplicativo. O que você normalmente coloca nessa camada / objetos? Deve-se sempre ter uma camada de negócios? Eu sei que deve conter "lógica de negócios", mas o que é isso exatamente? Acabei de executar a validação de entrada e instanciar um ou mais DAOs e chama os métodos apropriados neles ...

Percebo que existem estruturas MVC como o Struts for Java, mas desde esse meu primeiro aplicativo da Web em Java, tentei entender melhor como as coisas funcionam. Olhando em retrospecto, espero que você possa responder a algumas das perguntas que encontrei.

questionAnswers(4)

yourAnswerToTheQuestion