¿He implementado una aplicación de n niveles con MVC correctamente?

Al no estar familiarizado con los patrones de diseño y la arquitectura, tengo problemas para explicar a los demás exactamente cómo está diseñada mi última aplicación. He cambiado entre pensar que es un n-tier puro, MVC puro y n-tier con MVC en la capa de presentación. Actualmente creo que esto último es correcto, pero quiero pensamientos de desarrolladores más experimentados.

Cómo funcionaBrowser envía una solicitud HTTP a Tomcat. Asigna la solicitud a través de web.xml a un servlet (que llamo controlador)El controlador crea una instancia de uno o más objetos de negocios y llama a métodos sobre estos, es decir,customerBO.getById(12) que nuevamente realizará la lógica / validación comercial antes de llamar a uno o más métodos DAO, es decir,customerDAO.getById(12). El BO devuelve una lista de CustomerVO al controladorEl controlador prepara los atributos para la vista (JSP) request.setAttribute("customers", customers);) y elige un archivo .jsp para usar, que a su vez iterará la lista y renderizará XHTML nuevamente al navegador. Estructura (mi propuesta / comprensión)

Presentation tier: actualmente uso lo que creo que es una implementación web MVC: los servlets (controladores), jsp (vistas) y mi propia implementación de formularios OO XHTML (es decir, CustomerForm) se encuentran aquí. Debería ser posible utilizar una GUI Swing / JavaFX / Flex cambiando esta capa de presentación y sin la necesidad de cambiar nada en las capas a continuación.

Logic tier: Dividido en dos capas, con Business Objects (BO) en la parte superior. Responsable de la lógica de negocios, pero no he encontrado mucho que poner aquí además de la validación de entrada ya que la aplicación consiste principalmente en acciones CRUD simples ... En muchos casos, los métodos simplemente llaman a un método con el mismo nombre en la capa DAO.

lases @DAO con métodos CRUD, que nuevamente contactan con el nivel de datos a continuación. También tiene métodos convertToVO (ResultSet res) que realizan ORM desde la base de datos y hacia (listas de) objetos de valor. Todos los métodos toman objetos de valor como entrada, es decir, customerDAO-> save (votante) y devuelve el votante actualizado en caso de éxito y nulo en caso de fracaso.

Data tier: En la parte inferior, los datos se almacenan en una base de datos o como archivos XML. No he "codificado" nada aquí, excepto algunos procedimientos almacenados de MySQL y disparadores.

Preguntas (además de la del título):The M en MVC. No estoy seguro de si puedo llamar a este MVC de n niveles cuando los modelos son listas / VO devueltos de objetos comerciales en el nivel lógico. ¿Se requiere que los modelos residan dentro de la capa de presentación cuando el controlador / vista está aquí? ¿Y pueden las plantillas de formulario en la capa de presentación llamarse modelos? Si es así; ¿Se deben considerar tanto los formularios como las listas de BO como la M en MVC? Según tengo entendido, en MVC se supone que la vista observa el modelo y se actualiza en el cambio, pero esto no es posible en una aplicación web donde la vista es una página XHTML representada. Esto a su vez me lleva a la pregunta: ¿MVC se implementa de manera diferente para aplicaciones web en comparación con las aplicaciones de escritorio normales? No estoy usando un patrón de controlador frontal cuando todas las solicitudes HTTP se asignan explícitamente en web.xml, ¿verdad? Para usar el controlador frontal, ¿debo reenviar todas las solicitudes a un servlet / controlador estándar que a su vez evalúa la solicitud y llama a otro controlador?The Business Layer se sintió un poco "inútil" en mi aplicación. ¿Qué pones normalmente en esta capa / objetos? ¿Se debe tener siempre una capa empresarial? Sé que debe contener "lógica de negocios", pero ¿qué es esto exactamente? Acabo de realizar la validación de entrada e instanciar uno o más DAO y llamar a los métodos apropiados en ellos ...

Me doy cuenta de que hay marcos MVC como Struts para Java, pero desde esta mi primera aplicación web Java intenté obtener una comprensión más profunda de cómo funcionan las cosas. Mirando en retrospectiva, espero que pueda responder algunas de las preguntas con las que me topé.

Respuestas a la pregunta(4)

Su respuesta a la pregunta