Pregunta

He estado usando Kohana por un par de meses ahora, y todavía soy relativamente nuevo en el MVC estilo de la organización de su código/presentación/db-capa.Por desgracia, si bien hay un montón de documentación sobre cómo crear un controlador, establecer un punto de vista, e interactuar con una base de datos a través de un modelo, no he encontrado muchos recursos que se ocupan de limpiar, y sugirió a los patrones de desarrollo.

Permítanme darles un ejemplo rápido:

Mi último proyecto tiene un controlador, porque no estoy seguro de si debería estar haciendo muchas más que eso...o cuando debo hacer una nueva.¿Cómo puedo determinar cuando un nuevo controlador es necesario, junto con la hora de un nuevo modelo que se necesita?

¿Fue útil?

Solución

Te sugiero que eches un vistazo a la arquitectura orientada a recursos , primero. Esto no le dará ninguna guía directa sobre cómo organizar su código. Sin embargo, cuando se piensa en términos de recursos, la vida es más fácil cuando se trata de decidir si se crea o no un nuevo controlador. Una vez que logras identificar un recurso en tu sistema, generalmente es bueno crear un modelo más un controlador para él, aunque esto es solo una regla general.

Algunos puntos adicionales:

  • busque recursos y cree un modelo y un controlador para cada uno de ellos (regla general)
  • no tenga miedo de crear modelos para recursos que no persisten
  • piense en los controladores como " plomería " o " cableado " del usuario al dominio de la empresa: su función es manejar las solicitudes de los usuarios y reenviarles la respuesta, mantenerlas lo más delgadas posible

Otros consejos

La regla general es la siguiente: cuando identifico un nuevo tipo de " item " que mi aplicación necesita administrar, me hago estas preguntas:

(1) ¿Deberían ser persistentes los elementos de este tipo?

(2) ¿Habrá muchas instancias de este elemento?

Si la respuesta a ambas preguntas es positiva, concluyo que dicho elemento debe ser un modelo (o elemento-modelo o clase de dominio, dependiendo de la terminología de su marco MVC). Cuando defino un nuevo elemento del modelo, también defino un controlador que admitirá las cuatro operaciones básicas: crear, recuperar, actualizar, eliminar (es probable que su marco pueda generar un controlador predeterminado para usted).

Es posible que desee obtener una copia de los "Patrones de arquitectura de aplicaciones empresariales" de Martin Fowler. La sección de Presentación Web habla ampliamente sobre cómo estructurar su código cuando usa un marco controlado por Front Controller, como cualquiera de la ola actual de marcos MVC.

Me gustan los controladores pequeños con una función claramente definida o un conjunto de funciones. Esto generalmente significa un controlador por página (o un conjunto de páginas similares). En mi sitio de Kohana, CSSMySite tengo sobre, blog, contacto, CSS y controladores de publicaciones.

Todo lo que hace el controlador es establecer la plantilla. El controlador de blog interactúa con el modelo de blog para enumerar múltiples publicaciones de la base de datos. El controlador de publicaciones interactúa con el modelo de blog para mostrar una publicación de la base de datos.

Cada vez que tengo datos que son persistentes (publicaciones de blog) o que se usan varias veces (lista de estados para un cuadro desplegable), entran en el modelo. Se puede acceder a los modelos mediante diferentes controladores, por lo que no tiene que ser un mapeo uno a uno del modelo al controlador.

Quizás una buena manera de aprender una buena programación MVC es pasar un tiempo en Ruby-on-Rails. Empecé a usar rieles hace un tiempo, y como resultado indirecto creo que ahora tengo una muy buena comprensión de MVC. Veo los rieles como el epítome de MVC. Por lo menos, podría ser una forma divertida de aprender MVC ... ¿qué piensas?

Aquí es un ejemplo de lo que he estado haciendo en mi Kohana de la aplicación.

Necesitaba un 'últimas noticias' de la sección, así que puedo configurar un controlador, el modelo y la vista, titulado 'noticias'.

Mis noticias controlador tenían métodos index(), feed() y media_releases().

Mi modelo consistió en db consultas que obtener mis datos de noticias a partir de una base de datos MySQL.

Y mi punto de vista es sólo un montón de HTML con algunos <?php echo $title; ?> y el como.

¿Hay alguna razón por la que no puede definir un sistema genérico que funcione globalmente para metadatos de bases de datos? En general, me parece que escribir cualquier código para acceder y mostrar datos simples es una redundancia innecesaria.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top