tutorial ejemplos design codeigniter design-patterns

design - ejemplos - codeigniter vs laravel



CodeIgniter: toma de decisiones para la creación de biblioteca y ayuda en CodeIgniter (6)

Después de desarrollar en CodeIgniter por un tiempo, me resulta difícil tomar decisiones sobre cuándo crear una biblioteca personalizada y cuándo crear una ayuda personalizada.

Entiendo que ambos permiten tener una lógica de negocios y son reutilizables en todo el marco (llamando desde un controlador diferente, etc.)

Pero creo firmemente que el hecho de que los desarrolladores centrales de CI separen las bibliotecas de los ayudantes, tiene que haber una razón detrás de esto y supongo que este es el motivo por el que espero que descubra y me ilumine.

Desarrolladores de CI por ahí, por favor asesorar.

Creo que es mejor incluir un ejemplo.

Podría tener una

class notification_lib { function set_message() { /*...*/} function get_message() {/*...*/} function update_message() {/*...*/} }

Alternativamente, también podría incluir todas las funciones en un ayudante.

En un archivo notification_helper.php , set_message(), get_message(), update_message() ..

Donde sea, de todos modos, aún puede ser reutilizado. Así que esto me hizo pensar en el punto de toma de decisiones sobre cuándo creamos exactamente una biblioteca y un ayudante especialmente en CI.

En una aplicación php normal (sin marco), la elección es clara ya que no hay ayuda, solo tendrá que crear una biblioteca para reutilizar códigos. Pero aquí, en CI, me gustaría entender la separación de desarrolladores principales de bibliotecas y ayudantes


Bueno, la elección se reduce a un conjunto de funciones o clase. La elección es casi la misma que una clase de instancia frente a una clase estática.

Si tiene simplemente un grupo de funciones, entonces solo necesita hacer un grupo de funciones. Si este grupo de funciones comparte una gran cantidad de datos, entonces necesita crear una clase que tenga una instancia para almacenar estos datos entre las llamadas al método (función de clase).

¿Tiene muchas propiedades públicas o privadas para almacenar relacionadas con sus mensajes de notificación?

Si usa una clase, puede establecer varios mensajes a través del sistema, luego get_messages () podría devolver una matriz privada de mensajes. Eso lo haría perfecto para ser una biblioteca.


Hay una pregunta que me hago a mí mismo al decidir esto que creo que también te ayudará. La pregunta es: ¿estoy brindando una función en mi marco o estoy consolidando?

Si tiene una característica que está agregando a su marco, entonces querrá crear una biblioteca para eso. La validación de formulario, por ejemplo, es una función que está agregando a un marco. Aunque puede realizar la validación de formularios sin esta biblioteca, está creando un sistema estándar para la validación, que es una función.

Sin embargo, también hay un asistente de formularios que te ayuda a crear el HTML de formularios. La gran diferencia con respecto a la biblioteca de validación de formularios es que el asistente de formularios no está creando una nueva característica, es solo un conjunto de funciones relacionadas que lo ayudan a escribir correctamente el HTML de los formularios.

Espero que esta diferenciación te ayude como a mí.


Helper contiene un grupo de funciones para ayudarlo a realizar una tarea en particular.

Ayudantes disponibles en CI

Las bibliotecas generalmente contienen funcionalidades no específicas de CI. Como una biblioteca de imágenes. Algo que es portátil entre aplicaciones.

Bibliotecas disponibles en CI

link origen


Personalmente uso bibliotecas para grandes cosas, digamos una biblioteca FTP que construí mucho más rápido que la biblioteca enviada por CodeIgniters. Esta es una clase con muchos métodos que comparten datos entre ellos.

Utilizo ayudantes para tareas más pequeñas que no están relacionadas con muchas otras funcionalidades. Las pequeñas funciones como decorar cadenas pueden ser un ejemplo. O copiar un directorio recursivamente en otra ubicación.


Si alguien me pregunta cuál es la forma en que sigues cuando llegue el momento de crear Ayudantes o Bibliotecas.

Creo que estas diferencias:

  • Clase: En pocas palabras, una clase es un modelo para un objeto. Y un objeto encapsula el estado y la responsabilidad relacionados conceptualmente de algo en su aplicación y generalmente ofrece una interfaz de programación con la que interactuar con ellos. Esto fomenta la reutilización del código y mejora el mantenimiento.
  • Funciones: una función es una pieza de código que toma una entrada más en forma de parámetro y procesa y devuelve un valor. Ya has visto muchas funciones como fopen () y fread (), etc. Son funciones integradas, pero PHP te ofrece la opción de crear tus propias funciones también.

Así que vaya para las bibliotecas de Class ie si un punto coincide

  1. variable global necesita usar en dos o más funciones o incluso en una, odio usar palabras clave globales
  2. inicialización predeterminada según cada llamada de tiempo o carga
  3. algunas tareas son privadas para entidades que no se abren públicamente, piense en funciones que nunca tienen modificadores públicos ¿por qué?
  4. función para funcionar las dependencias, es decir, las tareas están separadas, pero dos o más tareas lo necesitan. Piense en verificar validate_email solo para el script de envío de correo electrónico a, cc, bcc, etc. todas estas necesidades validate_email.
  5. Y, por último, todas las tareas relacionadas, es decir, las funciones, deben colocarse en un solo objeto o archivo, es más fácil para referencia y recuerdo.

Para Helpers: cualquier punto que no coincida con las bibliotecas


En primer lugar, debe asegurarse de comprender la diferencia entre CI libaray y la clase de ayuda. La clase Helper es cualquier cosa que ayude a cualquier cosa prefabricada, como array , string , uri , etc. están allí y PHP ya les proporciona funciones, pero aún creas un ayudante para agregarles más funcionalidades. Por otro lado, libaray puede ser algo parecido a algo que estás creando por primera vez, cualquier solución que podría no estar necesariamente disponible.

Una vez que comprenda esta diferencia por completo, tomar una decisión no debe ser tan difícil.

Espero que ayude.

Gracias