Si les gustó el artículo anterior sobre las diferentes filosofías o formas de estructurar nuestra aplicación en Laravel 4 y 5, hoy les va a gustar mucho este video, porque llevaremos el artículo a la práctica.

Vamos a refactorizar nuestro módulo de secciones una vez más, y esta vez será una refactorización más fuerte porque vamos a eliminar la carpeta de modelos de Laravel (models/), y vamos a crear una nueva estructura para nuestra aplicación basada en PSR-4. Para ello comenzaremos una refactorización donde extraeremos lógica de nuestros controladores y modelos a otras capas, comenzando así a liberar de responsabilidades a nuestras clases, cumpliendo con el Singe Responsability Principle, que es la base de los principios básicos de la programación orientada a objetos, conocidos como SOLID.

Hoy comenzaremos implementando una adaptación del patrón repositorio o Repository pattern en Laravel. Este patrón nos enseña que debemos crear una capa adicional para extraer o almacenar datos en una fuente externa (ej: la base de datos). En este caso no es lo mismo un modelo o entidad que representa un registro dentro del sistema (por ejemplo una fila en la base de datos) que un repositorio que implementa la lógica para acceder (select) a dicho registro o para editarlo (insert, update, delete).

Laravel implementa en su ORM Eloquent otro patrón llamado Active Record que relaciona directamente el modelo con el acceso a los datos (ejemplo, en ActiveRecord usamos Model::all() o $model->save()), sin embargo es posible adaptar el patrón repositorio dentro de Laravel como veremos en el video.

Al crear una capa de repositorios adicional a la capa del modelo, desvinculamos el controlador de la implementación específica de Eloquent y hacemos posible que más adelante podamos implementar otras formas diferentes de acceder a los datos (una API, un sistema de archivos, etc.) Además evitamos la duplicación de código y nuevamente, damos un paso más para cumplir con los principios SOLID, facilitar la creación de pruebas para nuestro código, etc.

Es importante que tengan en cuenta que la manera cómo accedemos a los datos no es nuestra aplicación, así como por ejemplo, si estamos escribiendo un libro, la manera cómo guardamos sus documentos (en Google Drive, en Dropbox, en un Pendrive o en el disco duro) no es nuestro libro.

También aprenderemos cómo usar la inyección de dependencias en Laravel, entre otros ajustes. Espero que les guste el video:

En próximos videos les hablaré sobre las interfaces en PHP, implementaremos el patrón Presenter, y otro patrón adicional para validar datos fuera del controlador.

Si quieres continuar aprendiendo de Programación orientada a objetos te recomiendo este otro video: cómo encadenar métodos con PHP, seguir visitando el blog y seguirme en Twitter.

¡Un saludo!

Regístrate hoy en Styde y obtén acceso a todo nuestro contenido.

Lección anterior Paginación de registros con Laravel y Codeception Lección siguiente Implementar Eloquent ORM en tu proyecto, sin Laravel