2010-09-10 90 views
7

Me preguntaba ¿qué debería hacer con mis entidades? Por ejemplo, una clase llamada Artículos, con unos pocos datamembers (nombre/título/fecha) y getters & setters. Podría agregarlos a mi miembro de datos de Artículos, pero es una mejor práctica separarlos. ¿Entonces, qué piensas?codeigniter: ¿a dónde van las entidades?

Gracias!

+0

¿Qué quiere decir con decir "podría agregar esto al miembro de datos de mis artículos, pero es una mejor práctica separarlos"? Supongo que deberías extender tu clase de Artículo de la clase Modelo (http://codeigniter.com/user_guide/general/models.html) y continuar. – Darmen

+0

con eso me refiero a agregar los miembros de la data al modelo, como en el ejemplo, pero ¿no es mejor separar las entidades? – networkprofile

+0

¿Puedes aclarar a qué te refieres con 'entidades'? – meagar

Respuesta

11

que suelo hacer esto:

1.- crear mis clases de entidad en/system/application/clases

class MyEntity { 
} 

2.- definir una constante para que apunte a esa carpeta en /system/application/config/constants.php

define('CLASSES_DIR', APPPATH . "classes/"); 

3.- incluyen las clases de entidades de los modelos:

require_once(CLASSES_DIR . "MyEntity.php"); 

class MyModel extends Model { 

    function test() { 
     $entity = new MyEntity(); 
     $entity->doSomeStuff(); 
    } 

} 

Eso no romperá su estructura de mvc, y lo mantiene para las clases de entidades separadas. ¡Espero que ayude!

+0

Esta parece ser la mejor solución. Hice esta pregunta recientemente en http://codeigniter.com/forums/viewthread/166650/ pero no obtuve ninguna respuesta sólida. – DisgruntledGoat

+0

gracias. me gusta – Amir

1

Los modelos de CodeIgniter usan el patrón singleton. Puede crear bibliotecas o uso $ foo = nueva Some_Model si se quiere, recuerde que todo es simplemente PHP :)

+0

Realmente no funciona bien si desea, por ejemplo, una lista de productos. Todo lo que estás haciendo es crear una colección de funciones. – DisgruntledGoat

+0

A la derecha, los modelos de CodeIgniter generalmente son tontos, delgados, únicos. Pero puedes usar PHP simple y antiguo para hacer las cosas como quieras. –

2

Me gustó la solución de @ ilbesculpi, pero la personalicé un poco usando un espacio de nombres en lugar de usar una constante y require_once. Aquí está mi versión:

1) Crear mis clases de entidad en/system/application/entities.

namespace MyApplication\Entities; 

class ArticlesEntity 
{ 
    function doSomeStuff() 
    { 
     // Your code here... 
    } 
} 

2) Incluir mi clase de entidad en mi modelo a través de un comunicado using.

use MyApplication\Entities\ArticlesEntity; 

class ArticlesModel extends CI_Model 
{ 
    function test() 
    { 
     $entity = new ArticlesEntity(); 
     $ArticlesEntity->doSomeStuff(); 
    } 
} 
+0

En mi opinión, esta es una solución más elegante. Sin embargo, creo que necesita algún mecanismo de autocarga como PSR-4. – beawolf

Cuestiones relacionadas