2009-11-10 9 views
12

Estoy seguro de que alguien ya publicó esta pregunta; sin embargo, me gustaría obtener todo tipo de recomendaciones para MVC en PHP. Sé que hay muchos expertos dispuestos a compartir sus conocimientos con las personas que tienen dudas sobre sus mejores prácticas de codificación.PHP MVC Mejores prácticas/"Reglas" para el éxito

  • ¿Cómo debe organizar su controlador?
  • ¿Cómo debe organizar su modelo?
  • ¿Debería el controlador invocar un método de modelo y los submétodos de llamada de modelo o debería el controlador llamar a todos los submétodos de modelo?
  • etc.

Espero que esto ayude a alguien por ahí (porque me ayudará a ciencia cierta).

+0

Intente utilizar un marco simple para comenzar. Déjame señalarte en el Codeigniter muy bien documentado: http://codeigniter.com/ – Frankie

+0

me resulta mucho más fácil elegir marcos de mvc cuando entiendes el patrón en sí. – Galen

+0

Estoy usando CodeIgniter, no quiero crear mi propio framework MVC o algo así. Solo quiero algunos consejos al respecto. :) – MarioRicalde

Respuesta

37

MVC es el patrón de diseño más incomprendido. Hay, por definición, un modelo.

Cuando un urbanista propone un proyecto, diseña un modelo para él. Las entidades separadas de las que puede estar compuesto el modelo: edificios, calles, parques, típicamente no están representadas por modelos separados: todas son facetas del modelo único.

Por lo tanto, en MVC, el modelo puede estar compuesto de diferentes entidades, y esa es probablemente la mejor palabra para esto: entidad, como en una entidad representada por una tabla de base de datos. El modelo en MVC podría incluso ser algo más abstracto de lo que realmente se representa en el código, sino más bien un paraguas conceptual para todos los datos sobre los que la aplicación podría necesitar actuar.

Teniendo en cuenta esto, si estas entidades tienen sus propios métodos, en particular métodos que podrían corresponder a las facetas de CRUD (crear, leer, actualizar, eliminar), deben no estar expuesto directamente al controlador, es demasiado bajo nivel de abstracción Estos bloques de construcción deberían formarse en una interfaz más gruesa, por ejemplo, podría eliminar un registro pero luego devolver la lista de registros después de la eliminación. El controlador solo necesita acceder a un método de grano más grueso que realiza todo lo anterior.

Además, exponer los métodos de las entidades directamente al controlador, podría hacer que los controladores tengan que reescribirse, junto con las clases de entidad, si hay un cambio, por ejemplo, en cuanto a qué ORM (asignación relacional de objetos) sistema está siendo utilizado.La capa intermedia que sugiero también es un buen lugar para el manejo de excepciones, el registro y cualquier otra administración que necesite.

La capa de métodos sugerida en un nivel superior de abstracción a veces se denomina delegado comercial, o una "fachada", pero esto es lo que realmente considero el modelo. Espero que esto no sea demasiado teórico y que sea útil para el OP u otros lectores.

+2

Excelente respuesta +1 Esto realmente ayuda mucho. La gente usa MVC Frameworks sin tener en cuenta esta gran información. Si tiene algo más para agregar, por favor, porque me gustaría saber más de usted con seguridad. – MarioRicalde

+0

No tengo mucho más que agregar, excepto que estas ideas generalmente se pueden aplicar dentro del contexto de un marco existente –

+1

Puede tener un Modelo para el sitio web y otro para el blog, así como Controladores. –

0

No estoy seguro de lo que quiere decir con "organizar".

El controlador llama al modelo [s] que necesita para que la información pase a la vista [s]. Es (el controlador) puede realizar múltiples llamadas al modelo para diferentes piezas de información.

tratar de leer esto: http://www.phpwact.org/pattern/model_view_controller

0

para PHP, me gusta usar el marco CodeIgniter. Establece el trabajo básico para la configuración de MVC. Los controladores se guardan en "/ controladores" y los modelos están en "/ modelos"

Creo que un controlador debe llamar al modelo y el modelo debe encapsular tanto como sea posible, utilizando submétodos si es necesario. Esto hace que su código sea mucho más flexible y adaptable. Ejemplo, hoy su modelo está leyendo desde una base de datos local, mañana podría estar leyendo desde un servicio REST. El modelo debe devolver datos al controlador y el controlador debe ser ingenuo con respecto a lo que está sucediendo dentro del modelo.

3

Me parece que el blog es relevante para su pregunta.

https://r.je/

Tom Butler, el autor del blog señala la forma en la mayoría de los marcos MVC permiten model-view interacción no es correcta y trata de explicar En la vista MVC debe tener acceso al modelo directamente usando algunos ejemplos.

Él tiene un punto válido, sin embargo que viene del fondo de los carriles que tenían dificultades para tragar la idea de view acceso a la model directamente.

-1

Los secretos del MVC es que el MODELO "M" debe ser creado y diseñado como un MODELO VIEW, no como un simple modelo.

Digamos que tenemos el siguiente ejemplo: Tenemos un formulario cuando el inserto de una entidad llamada de atención al cliente:

cliente

  • IdCustomer
  • Nombre
  • SurName
  • País.

La regla de MVC dice que debemos enviar el MODELO de Cliente a la Vista. Sin embargo, supongamos que el campo País se completa con un cuadro combinado. Entonces, debemos enviar una lista de país a la VISTA.

enter image description here

Por lo tanto, vamos a tener el siguiente modelo de vista

CustomerViewModel

  • cliente
    • IdCustomer
    • Nombre
    • SurName
    • País.
  • CountryList

Además, por lo general una forma que no es tan simple como campo y nada más, tiene botones, etiquetas/de mensaje y tal. Debe modelarse en el VIEWMODEL

Cuestiones relacionadas