2012-08-12 14 views
11

Soy un programador de Java que intenta investigar CakePHP: actualmente tengo un problema con la estructura/diseño de la aplicación. No pude entender dónde poner la lógica central de la aplicación.CakePHP - dónde poner la lógica del servicio

Cuando estoy desarrollando en JavaEE, enfoque común parece siguientes:

  • clases modelo son granos simples que representan entidades de datos (productos, personas, etc) - en su mayoría como estructuras de datos con getters/setters;

  • Las clases de controlador son clases lo suficientemente simples que agregan datos necesarios y los inyectan en una plantilla de Vista dedicada que luego se envía al usuario;

  • DAO (DataAccessObject) o las clases de repositorio son aquellas que pueden cargar y almacenar entidades en la base de datos;

  • Las clases de servicio son generalmente singletons que contienen ciertos métodos lógicos de negocios; estos son llamados por controladores, por otros servicios o por acciones programadas, por otro lado llaman métodos DAO/Repository para buscar o modificar datos.

Por ejemplo si tengo entidades Person, Product y Order, cuando el usuario selecciona algún producto y clics "puso en mi compra/cesta" new Order para este Person debe ser creado y esto Product debe añadirse a esta Order (podemos verificar que Person no está mal deudor y que Product está presente en la tienda, etc.) - todo este trabajo se realiza en los métodos de OrderService llamados por algún controlador.

Por lo general algún tipo de COI (Inversión de Control) se utiliza para que todos los servicios y controladores tienen enlaces a los servicios necesarios etc.

Ahora estoy un poco desconcertado sobre cómo todo esto se hace en CakePHP. ¿Dónde debería poner esta lógica comercial, etc.?

Respuesta

6

En CakePHP, la capa del modelo se compone de la colección de instancias active record, llamada AppModel. Combinan la lógica relacionada con el almacenamiento (que normalmente pondría en DAO y/o repositorios) con la lógica de negocios (lo que generalmente entraba en sus "modelos").

Cualquier otra lógica relacionada con el dominio (de su Servicio) se convierte en parte del controlador.

Si usted quiere saber, cómo eres supone que implementar la lógica de negocio de dominio en CakePHP, con tan sólo mirar a los artículos que alaban registro activo patrón.

Opinión personal
CakePHP y CodeIgniter son dos de los peores marcos en PHP.
Están llenos de malas prácticas.

En realidad, si estuviera haciendo MVC-ish correcta, entonces la capa modelo contendría toda la lógica de negocio y todo lo que se relaciona con él. La capa del modelo está compuesta de DAO, Repositorios, Domain Objects (lo que usted llama "modelos") y Servicios.

Si bien las descripciones del código basado en Java indican que se está moviendo en esa dirección, CakePHP ni siquiera está remotamente cerca de él.

Por otra parte, podría ser que my understanding de MVC es simplemente incorrecto.

+0

Gracias por su explicación. La mención del patrón ActiveRecord hace que las cosas me resulten un poco más claras. En cuanto a su opinión personal, ¿qué frameworks de PHP cree que son mejores siguiendo la idea de MVC y las buenas prácticas? –

+3

@RodionGorkovenko, actualmente el mejor, en lo que respecta a la práctica de codificación, se considera Symfony2. Pero es como ser el tipo más inteligente en la clase de recuperación. Y Sf2 es [no es un marco MVC] (http://fabien.potencier.org/article/49/what-is-symfony2). Pero deberías ser capaz de usar el patrón de diseño MVC con él. La mayoría de los frameworks PHP, que pretenden ser "frameworks MVC", están siguiendo la interpretación RubyOnRails de MVC (ver es plantilla y el modelo es ORM), con todas las desventajas incluidas. –

+0

Me encanta tu respuesta @ tereško. Por favor, sigan así! –

1

Los controladores solo deben contener la lógica relevante para que todo sea una aplicación web. Su lógica comercial pertenece a los modelos. Creo que es uno de los errores básicos que se encuentran en muchas aplicaciones cakePHP, que mucha lógica se pone en los controladores, que en realidad pertenece a los modelos.

+0

Hm ... Parece que nunca hablé de poner la lógica comercial en los controladores. Aunque no pensé en colocarlo también en Models. Pensé que los Componentes en PhpCake son algo así como nuestros Servicios en Java EE, pero se ven más auxiliares ... –

0

En CakePHP. la "M" es solo un montón de modelos de datos en lugar de modelos de dominio. En mi opinión. CakePHP está hecho para el desarrollo de RAD. No es una buena opción para aplicaciones empresariales.

Mi opinión sin embargo.

Cuestiones relacionadas