2008-11-03 17 views
10

Estoy un poco confundido acerca de cómo funciona MVC y no puedo encontrar nada más que ejemplos básicos.Cómo mostrar múltiples widgets en la misma página usando MVC

Quiero hacer un tipo de diseño basado en widgets; puede elegir varios widgets para ir a su página. Cada widget debe ser responsable de sí mismo, debe tener un controlador y una vista. Pero, ¿qué hay de la página principal? ¡De repente tengo una página con muchos controladores!

Lo más obvio es insertar los controladores en la vista de alguna manera ... This is my widget {SomeWidget} pero he leído que "rompe el paradigma MVC".

Algunos widgets deberán enviar a diferentes URL (como un cuadro de búsqueda a la página de resultados) y algunos deberán enviar de nuevo a la misma URL (como agregar un comentario a un artículo lo trae de vuelta al artículo) .

encima de todo, el usuario debe ser capaz de editar el código HTML alrededor del widget - por ejemplo, si quieren un buscador de la derecha, se puede escribir <div style="float: right;">{SearchController}</div> (en mi mundo paradigma sin precedentes)

Respuesta

2

No soy muy bueno en la programación web, pero creo, por el ejemplo que describió, que debe haber un modelo, una vista y un controlador para toda la página. Ahora la vista en sí debería contener las vistas para cada widget en la página (y lo mismo vale para el controlador de página) al que envía los mensajes que recibe.

Conceptualmente hay un nivel más bajo de MVC (para widgets) y un nivel más alto de MVC (para la página). Y el paradigma de MVC no se romperá. Ahora puede editar el HTML alrededor del widget, cambia el modelo de página (y no cualquier modelo de widget).

Espero que esto ayude!

+0

Tener que agregar código a la plantilla y la clase no crea un widget plug and play. – rick

+0

Me temo que no entiendo tu comentario ... ¿Podrías volver a expresarlo? –

2

Para añadir a @ comentario de Benoît:

marco El Symfony se encarga de esto con los componentes. Cada componente es una instancia de MVC independiente que puede integrarse en otra vista. No se puede crear una instancia para responder directamente a solicitudes web como la instancia MVC normal (un par módulo/acción). Solo se puede incrustar en otra vista de MVC.

Como nota al margen: Symfony también trata los complementos como su propia instancia completa de MVC, completa con su propio esquema, modelos, controladores, archivos de configuración, vistas, etc.

En su caso, cada componente sería su propia instancia de MVC y la aplicación uniría estos componentes. Cada componente sería responsable de cómo responde a un envío de formulario.

MVC no significa que hay UNA vista y UN controlador. Simplemente significa que la lógica de la aplicación se almacena en modelos, el controlador pega cosas, y la vista crea la pantalla. Es una separación formal y lógica de la lógica y la presentación.

0

Hay muchas variaciones en el tema de MVC y mucho que considerar antes de llegar a una conclusión sobre el diseño de su sistema en particular. La mayoría de los últimos y populares sistemas basados ​​en la web se ven como IoC como el principal rector. Normalmente, algún tipo de componente de marco es el controlador que utiliza algún tipo de configuración para invocar la plantilla adecuada como vista y para acoplarla con la jerarquía de objetos adecuada como modelo. La mayoría de estos sistemas incluyen una biblioteca de widgets GUI extensible para ser utilizada por las plantillas. Puede agregar sus propios widgets, pero no es recomendable codificar sus widgets en una jerarquía de objetos específica. Ese enlace IoC también habla sobre los componentes y servicios que deberían darle alguna dirección sobre cómo evitar esa codificación difícil.

1

uno de los mejores, cortas y simples libros que he encontrado en MVC es éste entregó la semana pasada en la exposición PDC 2008:

http://www.apress.com/book/view/1430216468

No sólo cubre el concepto de MVC, pero sus comparaciones con otros conceptos como Ruby on Rails y la metodología MVP.

Además, entra en la única razón MVC existe describiendo es separación de las preocupaciones, y por qué no sólo debe estar en el nivel de interfaz de usuario - pero por dentro de las capas actuales o estructura de la COI de sus objetos de negocio y DAL.

Recomiendo este libro porque cubre las mejores prácticas, en solo 110 páginas aproximadamente.

Y no, no trabajo para FirstPress ni estoy relacionado con ellos en absoluto. Simplemente me gustó el libro, y finalmente alguien con quien estoy de acuerdo.

+0

Este libro es más acerca de un MVC Framework específico (ASP.NET MVC). Sin embargo, al menos estoy de acuerdo en que tiene una buena sección sobre cómo MVC se compara con otros patrones de interfaz de usuario. –

+0

Ese enlace está podrido y nunca mencionaste el título del libro. ¿A qué te refieres? –

0

ASP.NET MVC es ideal para una página de tipo mashup del tablero de instrumentos.

Tome un vistazo a this sesión desde PDC 2008.

Es probable que desee utilizar los helpers de Ajax para actualizar las islas de los datos en cada widget. Aquí hay un fragmento de cómo puedes poner una calculadora en cualquier página pero mantener el código independiente.

vista de fragmentos:

<script type="text/javascript"> 
    function OnFailure(error) { 
     alert("We have encounterd an error " + error); 
    } 
</script> 
<% using (Ajax.BeginForm("Add", new AjaxOptions{UpdateTargetId="sum", OnFailure="OnFailure"})){ %> 
    <%= Html.TextBox("x") %>&nbsp;+&nbsp; 
    <%= Html.TextBox("y") %>&nbsp;=&nbsp; 
    <span id="sum">?</span> 
    <input type="submit" value="AddEm" /> 
<% } %> 

controlador Fragmento:

[AcceptVerbs(HttpVerbs.Post)] 
public ActionResult Add(string x, string y) 
{ 
    int sum = int.Parse(x) + int.Parse(y);  
    return Content(sum.ToString()); 
} 
+0

¿Por qué esta respuesta fue rechazada? Si hay un error, avíseme y lo corregiré. –

1

La mejor información que he encontrado en hacer los widgets en ASP.NET MVC es en el blog de Steve Sanderson. Él explica su concepto de solicitudes parciales, que es una técnica diferente de los subcontroladores.

http://blog.codeville.net/2008/10/14/partial-requests-in-aspnet-mvc/

solicitudes parciales son fáciles Usted ha oído hablar de vistas parciales, así que ¿qué solicitudes parciales? Dentro de cualquier solicitud de MVC , puede configurar una colección de solicitudes parciales internas, cada una de que puede configurar sus propias solicitudes parciales , y así sucesivamente. Cada solicitud parcial representa un método simple de acción en cualquiera de sus controladores regulares , y cada uno puede producir un widget independiente. Soy llamándolos "solicitudes" parciales en lugar de que "controladores" porque ejecutan un propia tubería de manejo de solicitudes MVC que es compatible con su sistema de enrutamiento y su fábrica de controladores. Aún así, como con los subcontroladores, todo el control permanece en los controladores, y la vista puede ser ignorante.

0

Creo que las respuestas de JarrettV y jcoby son las más cercanas.

que he llegado a conocer como subcontroladores jerárquica MCV (HMVC). La idea es que "extraiga" contenido (una vista poblada por un subcontrolador) desde la plantilla de vista principal en lugar de "enviar" datos a la plantilla desde el controlador. Por lo tanto, en lugar de tener que editar tanto el controlador como la vista para agregar un widget, solo llama al widget desde la vista. Hay bibliotecas para lograr esto en los frameworks php CodeIgniter (Extensiones Modulares) y Kohana (Despacho y Componente).

Cuestiones relacionadas