¿Hay algún patrón de diseño excepto MVC para web?

15

Quiero saber, ¿hay patrones de diseño para la web además de MVC?

Sé que hay patrones de diseño como: Registry, Observer, Factory, ActiveRecord, ... y MVC, un conjunto de otros patrones de diseño y estructura de carpetas.

¿Hay un patrón de diseño como MVC es un conjunto de otros patrones de diseño?

Editar: mi lenguaje de programación es PHP.

Saeed M.
fuente
Siempre existe el patrón BBOM .
zzzzBov
1
@ Mr-Moqadam, eche un vistazo - meta.stackexchange.com/questions/5234/…
Yusubov
Creo que las respuestas a continuación responden todas las facetas de su pregunta. Podrías aceptar el mejor y ayudar a la comunidad.
Arpith
¿Qué pasa con el patrón de flujo de FB?
Muhammad Umer
Ver Ver primero también.
nawfal

Respuestas:

25

Existen diferentes patrones en el desarrollo de software; MVP, MVVM, MVC, etc. son algunos de los más conocidos. Sin embargo, debe definir el problema específico o la tecnología que tiene la intención de resolver o utilizar.

ingrese la descripción de la imagen aquí

Cada uno de estos patrones es bueno para resolver algunos conjuntos específicos de problemas. Por ejemplo, el patrón MVP (Model View Presenter) ayuda a introducir la separación de preocupaciones en el desarrollo de ASP.NET WebForms. Consiste en dividir las responsabilidades de recopilar, mostrar y almacenar datos de una página web en objetos separados: un objeto Modelo, un objeto Ver y un objeto Presentador.

El libro de cocina general más famoso de los patrones de diseño son los patrones de diseño Gang of Four (GoF) .

ingrese la descripción de la imagen aquí

Editar: supongo que está más interesado en implementar patrones de diseño en la plataforma .NET

Yusubov
fuente
1
¿+1 vamos a vivir con MVC definido como un patrón, o una técnica que veremos pronto o cerca veremos su sucesor?
Independiente
66
+1 pero MVP, MVVM y MVC son todas variaciones del mismo tema: separar (g) ui de la lógica del modelo y hacer que un tercero (controlador, presentador) medie entre ellos.
Marjan Venema
2
@ Mr-Moqadam: MVC parece una exageración y complicado al principio. Hace lo que debe hacer, separando la interfaz de usuario, la lógica y los datos. Lo único seguro en el desarrollo de software es el cambio. Y como regla general; 20% es desarrollo, 80% es mantenimiento. Desde esa perspectiva, MVC seguramente vale la pena el esfuerzo. También es el patrón más básico para lograr esto, supongo.
Bruno Schäpper
3
@ Mr-Moqadam: No, te ayuda mucho, incluso si estás solo. Y especialmente en grandes proyectos.
Bruno Schäpper
1
@ Mr-Moqadam ¿Quién dijo que MVC es un patrón de desarrollo de equipo? He estado desarrollando durante mucho tiempo solo usando PHP y MVC es obligatorio para mí para mantener las cosas mantenibles. ¿Has intentado usar algún framework PHP?
Songo
7

Un buen patrón, que encontré hace unas semanas, es MOVE . Parece un poco más sofisticado como MVC, pero se basa en el mismo principio. Una desventaja de MVC es que sus controladores pueden ser realmente grandes. Usando el patrón MOVE, manejarás este problema un poco.

Otros patrones, nombrados por los demás, también son buenas alternativas.

Jan_V
fuente
¡¿Pensé que MVC promovió el uso de controladores delgados ?! Ya sabes el dicho "Controladores delgados y modelos gordos"
Songo
Así es, pero en realidad los controladores tienden a engordar bastante.
Jan_V
2
Eso es porque pones la lógica de dominio en los controladores, que no era la intención del MVC original de Krassner & Pope. Los controladores de la manera original tratan sobre el manejo de entradas, por ejemplo. conectando los clics del mouse sobre las coordenadas (X, Y) en una operación modelo (como aumentar la temperatura en una aplicación de termostato). Dicho esto, la mayor parte de la capa de controlador en el sentido MVC está completamente automatizada y, por lo tanto, es invisible para el desarrollador de la aplicación en un marco.
Aadaam
se mueve como un flujo
Muhammad Umer
4

Lo primero que debe establecer es lo que debe hacer exactamente, para decidir si un marco y / o MVC (u otro patrón de diseño) sería beneficioso.

Los marcos están ahí para proporcionar una plataforma consistente para el desarrollo, mientras que generalmente proporcionan soluciones a los requisitos de programación comunes (como la interacción de la base de datos, la creación y validación de formularios, la autenticación de usuarios, etc.)

Para PHP, al menos, el patrón de diseño MVC / HMVC tiende a dominar los marcos principales disponibles (por ejemplo , Zend , CakePHP , CodeIgniter , etc.), pero hay muchos patrones de diseño diferentes que uno podría usar.

MVC es muy popular porque ofrece una forma establecida y entendida de separar el modelado de datos y la lógica de procesamiento de la capa de vista / presentación (algo que se considera deseable para producir aplicaciones robustas y escalables).

Es importante tener en cuenta (y como lo expresó @Marjan Venema en un comentario a la respuesta de @ ElYusubov) que MVC, MVP, MVVM y los otros patrones MV x son (al menos en principio) el mismo 'patrón de diseño'.

Por lo general, los patrones de diseño diferentes sirven (a menudo sutilmente) para diferentes propósitos y, en varios casos, se desarrollaron con un lenguaje específico en mente. Sin embargo, un verdadero "patrón de diseño" no es una regla difícil y rápida para la programación y es realmente más una comprensión filosófica / idealógica de la implementación de un programa y los requisitos de diseño y las funciones lógicas.

La investigación es la mejor manera de conocer los principales principios de programación y las mejores prácticas, aquí hay algunos enlaces de Wikipedia para comenzar:

En la práctica, no hay nada que le impida implementar su propio "patrón", en mi opinión, la mejor manera es aprender haciendo, al menos para mí no entendí completamente el patrón MVC hasta que comencé a intentar escribir un sitio web con él.

Una vez que comprenda algunos de los conceptos de programación y las mejores prácticas, puede usarlos para construir su propio sistema para resolver los problemas específicos que enfrenta y satisfacer sus necesidades, ya sea que se ajuste a un 'patrón' establecido o no.

Si no tiene un conjunto específico de problemas para resolver, entonces aprender uno de los marcos comunes es su mejor opción.

Chris
fuente
3

Uno de los ejemplos más famosos es Knockout.js, que es un marco de JavaScript que utiliza el patrón de diseño MVVM . Aquí hay un gran artículo sobre el desbordamiento de la pila que compara el framework MVC Backbone.js vs Knockout.js .

Una nota al margen es que el patrón de diseño MVVM se originó en Microsoft como una especialización del patrón de diseño PM de Martin Fowler. MVVM es utilizado ampliamente por las aplicaciones WPF.

dodgy_coder
fuente
¡página no encontrada!
Muhammad Umer
1
@ MuhammadUmer Gracias, he actualizado el enlace. Desafortunadamente, StackOverflow eliminó esa pregunta de más de 1000 puntos. Afortunadamente, la máquina de retroceso no tiene un sistema de moderación estricto.
dodgy_coder
No me sorprende en absoluto ... espero que todos los sitios sean así también.
Muhammad Umer
0

Como señaló ElYusubov, el marco ASP.Net ha tenido durante mucho tiempo patrones MVP y MVVM, si está buscando ejemplos relativamente convencionales. Una de las principales diferencias entre MVC y MVVM es cómo se actualizan sus entidades; MVC se adapta mejor al enfoque tradicional sin estado o semi-sin estado de las aplicaciones web. El marco ASP.Net trató de solucionar esto manteniendo su estado incrustado en un formulario (para que pudiera restaurarse en cada solicitud), lo que hizo que los patrones MVP y MVVM tuvieran más sentido allí.

Con HTML5, las aplicaciones se vuelven cada vez más pesadas en JavaScript, y gran parte de su estado está en el cliente. Esto puede conducir a un resurgimiento en los marcos MVVM, y Knockout JS es un ejemplo.

Daniel B
fuente
0

La mayoría de los patrones en la naturaleza son MVC, o algún sabor de MVC. Después de todo, tiene sentido dividir sus datos (Modelo), la representación (Ver) y la interacción con ellos (Controlador). Si observa MVC tal como se fundó en los años 80, descubrirá que nunca fue un marco web. Por lo tanto, encontré que estaba muy sobrecargado en la web.

Otro patrón bien conocido sería la Arquitectura Orientada a Servicios (SOA). Basado en eso, un enfoque moderno sería tener un MVC (o sabor) en su servidor, solo para exponer un servicio con el que pueda trabajar. En el lado del cliente, habría otra aplicación de estilo MVC, por ejemplo, una aplicación web con HTML5 y JavaScript (Twitter o Linked In, por ejemplo). La aplicación cliente usaría su servicio del lado del servidor (la "Vista" del servidor) como su Modelo. En mi humilde opinión, esto sería lo último en tecnología y probablemente empujará al lado del servidor solo MVC a un lado.

Bruno Schäpper
fuente
0

Personalmente, estoy buscando implementar algo que use la idea de Representación de métodos de recursos , aunque en esta etapa es principalmente un experimento más que cualquier otra cosa. Tiene algunos puntos convincentes porque modela una solicitud / respuesta HTTP mejor que MVC (que está destinado a aplicaciones de larga duración que se ejecutan en una sola computadora en lugar de sesiones de solicitud / respuesta de corta duración). Sin embargo, tiene el inconveniente de que si coloca métodos en sus recursos para manejar GET, POST, PUT, DELETE, etc., sus recursos se acoplarán al front-end. Estoy pensando que voy a separar eso en otra capa.

GordonM
fuente
0

Hay más de 1000 formas, excepto MVC, algunas de ellas son similares a MVC y algunas totalmente diferentes

por ejemplo :

  1. Modelo-Plantilla-Vista - MTV
  2. Modelo – vista – presentador - MVP
  3. Modelo jerárquico-vista-controlador HMVC
  4. Vista de modelo ViewModel- MVVM

etc.

Saurabh Chandra Patel
fuente
1
Esto no parece ofrecer nada sustancial sobre los puntos hechos y explicados en las 7 respuestas anteriores
mosquito
Esta es la respuesta más simple de la pregunta, creo.
Saurabh Chandra Patel