patrones de diseño 101.
Modelo es para almacenar datos (por lo general en bases de datos).
Ver es para presentar los datos (no manipulándola).
controlador es para manipular el modelo y de paso, que a la vista (la elección de la configuración regional correcta, por ejemplo, iría aquí).
MVC no significa necesariamente que tiene 3 clases distintas, sino 3 componentes o capas. Estos son abstractos y no necesariamente tienen que estar vinculados a una clase física. Dentro de tu capa de Controlador, puede consistir en cualquier cantidad de clases auxiliares o lo que sea.
Estoy de acuerdo con parte de lo que está diciendo cartoonfox, todo está entrelazado. Por ejemplo, si desarrolla una vista para un carro de compras, pero el modelo contiene información de cumpleaños, entonces no va a funcionar. Es simplemente un patrón de diseño para ayudar a eliminar la duplicación de esfuerzos. Cuando tiene menos variables y menos ruido, es mucho más fácil enfocarse en lo que se necesita hacer y entenderlo muy bien.
Tuve una discusión con nuestro equipo sobre el uso de anotaciones para representar formularios en una página web. Estas anotaciones se colocaron en el modelo o clase de entidad.A menudo trabajará directamente con clases de entidad, por lo que elimina bastante sobrecarga y duplicación de esfuerzo si coloca aquí sus anotaciones. Debido a que sus anotaciones se colocan directamente en la clase de modelo, no puede terminar con una vista de información de cumpleaños, simplemente no es posible. Además, siguiendo los patrones, eliminas la basura que no agrega valor al resultado final. Simplemente escribe la lógica de negocios y prácticamente nada más.
Aunque las anotaciones pertenecían a la misma clase que la capa del modelo, la capa de presentación o vista consistía en las anotaciones y las clases auxiliares. No necesita necesariamente ser clases o límites distintos.
Otro ejemplo sería. He trabajado en algunas "aplicaciones" web PHP en el pasado. Utilizo aplicaciones porque eran un bloque monolítico de código, más o menos un único método principal con toda la lógica allí (que difícilmente es una aplicación funcional).
Si no abstrae el código en funciones y simplemente utiliza un único método, terminará con mucha duplicación de esfuerzo. Si trataras de entender ese bloque de código monolítico, estarías en un montón de problemas (como yo, era difícil saber qué estaba pasando, luego encontraría un bloque de código similar en otro lugar y quedaría estupefacto por qué pocas cosas se modificaron como estaban).
Se puede hacer de la manera que desee, pero los patrones de diseño como MVC lo ayudan a simplificar lo que escribe para que funcione y también a que se adapte más fácilmente a la solución. Otro patrón o enfoque de diseño popular es dividir y conquistar.
para responder a sus preguntas originales:
En Java, los datos localizados se llevaría a cabo de forma transparente por la aplicación. Por ejemplo, si desea soporte de locales Inglés de EE.UU., debe crear un archivo de propiedades:
messages_en-US.properties
y luego colocar todo el contenido de EE.UU. Inglés allí. Dependiendo de la cantidad de contenido que pueda ser, es posible que desee utilizar un enfoque diferente.
Para mi aplicación tengo páginas enteras en un idioma diferente, así que lo que hago es esto. Mi controlador determina la configuración regional del cliente o la mejor coincidencia. Luego elige qué vista mostrar y pasa el modelo (datos) a la vista.
Si necesita un formato dinámico para su fecha/hora, entonces su controlador es responsable de determinar cuál será utilizado. Entonces, su vista es responsable de usar ese convertidor para formatear el valor.
Estoy utilizando JBoss Seam por lo que el patrón de diseño MVC todavía se utiliza, pero de forma más abstracta. No tengo 'controladores' reales, sino un interceptor que es responsable de manejar una pieza específica de funcionalidad (determinar la configuración regional del cliente y luego otra para su preferencia de fecha/hora). Mis controladores que serían el equivalente de un Controlador de Primavera son componentes de acción responsables de manejar las acciones de la página.
Walter
Eso parece romper el concepto de MVC ya que su vista realmente usa el "servicio de localización", es decir, se comporta como un controlador. –
LocalisationHelper no es un servicio, sería simplemente un formateador para hacer que su código de vista sea más nítido. Simplemente formatea los datos que su Controlador le está dando a su Vista. – JonoW
@JonoW No puedo estar de acuerdo contigo, porque LocalisationHelper conoce la sesión del usuario. Significa que es con estado, así que no es solo un ayudante estático sino un servicio real. Si no fuera así, debe proporcionarle el parámetro Locale. –