laymont/laravel-pattern-repository
Composer 安装命令:
composer require laymont/laravel-pattern-repository
包简介
Laravel package for implementing the Repository Pattern with Eloquent, Criteria, and Actions support
README 文档
README
Este paquete de Laravel simplifica la implementación del patrón repositorio, ayudando a crear aplicaciones con una arquitectura limpia, mantenible y escalable.
¿Qué es el Patrón Repositorio?
El patrón repositorio actúa como una capa de abstracción entre la lógica de negocio y la capa de acceso a datos. Al usar repositorios, tus controladores y servicios interactúan con los datos a través de interfaces, sin necesidad de conocer la implementación concreta del acceso a datos (por ejemplo, consultas a la base de datos). Esto aporta múltiples ventajas:
- Desacoplamiento: Reduce la dependencia entre las diferentes capas de la aplicación.
- Facilidad de prueba: Permite realizar pruebas unitarias de la lógica de negocio sin necesidad de una base de datos real (usando mocks).
- Flexibilidad: Facilita el cambio de la implementación del acceso a datos (por ejemplo, cambiar de base de datos o usar un ORM diferente) sin afectar la lógica de negocio.
- Código organizado: Promueve un código más limpio, estructurado y fácil de mantener.
- Reutilización: Facilita la reutilización de la lógica de acceso a datos en diferentes partes de la aplicación.
Compatibilidad
- Laravel Framework:
^13.0 - PHP:
>=8.3
Instalación
Puedes instalar el paquete usando Composer:
composer require laymont/pattern-repository-laravel
El paquete se autodescubre, por lo que no es necesario registrar el ServiceProvider.
Estructura del Paquete
src/
├── Actions/
│ ├── CreateAction.php # Acción para crear registros
│ ├── UpdateAction.php # Acción para actualizar registros
│ └── DeleteAction.php # Acción para eliminar registros
├── Concerns/
│ ├── Cacheable.php # Trait para caché de consultas
│ ├── HasCriteria.php # Trait para patrón Criteria
│ └── HasEloquentScopes.php # Trait para global scopes
├── Contracts/
│ ├── RepositoryInterface.php # Interfaz base del repositorio
│ ├── ReadableRepositoryInterface.php # Interfaz solo lectura
│ ├── WritableRepositoryInterface.php # Interfaz solo escritura
│ └── CriteriaInterface.php # Interfaz para Criteria
├── Criteria/
│ ├── WhereEqualsCriteria.php # Criteria para WHERE campo = valor
│ └── SearchWhereLikeCriteria.php # Criteria para búsqueda LIKE
├── Repositories/
│ └── EloquentRepository.php # Repositorio base con Eloquent
└── Providers/
└── PatternRepositoryServiceProvider.php
Uso Rápido
1. Crear un Repositorio
use Laymont\PatternRepository\Repositories\EloquentRepository; use App\Models\User; class UserRepository extends EloquentRepository { public function __construct(User $model) { parent::__construct($model); } }
2. Usar el Repositorio
// Inyectar en controlador public function __construct( protected UserRepository $users ) {} // Obtener todos los usuarios $users = $this->users->all(); // Buscar por ID $user = $this->users->find($id); // Crear usuario $user = $this->users->create($data); // Actualizar usuario $this->users->update($id, $data); // Eliminar usuario $this->users->delete($id); // Paginar $users = $this->users->paginate(15);
Características Avanzadas
Patrón Criteria
use Laymont\PatternRepository\Criteria\WhereEqualsCriteria; $repository->pushCriteria(new WhereEqualsCriteria('active', true)); $users = $repository->all(); $repository->resetCriteria();
Caché de Consultas
$repository->enableCache(60); // Habilitar caché con TTL de 60 segundos $repository->disableCache(); // Deshabilitar caché // Los resultados se cachean automáticamente
Acciones Atómicas
use Laymont\PatternRepository\Actions\CreateAction; use App\Models\User; $action = app(CreateAction::class); $user = $action->execute(new User(), $data);
Scopes de Eloquent
$repository->withScopes(); // Aplicar todos los global scopes $repository->withoutScopes(); // Quitar todos los global scopes
Interfaces Separadas
ReadableRepositoryInterface
use Laymont\PatternRepository\Contracts\ReadableRepositoryInterface; interface UserReadRepository extends ReadableRepositoryInterface { public function findByEmail(string $email): ?User; }
WritableRepositoryInterface
use Laymont\PatternRepository\Contracts\WritableRepositoryInterface; interface UserWriteRepository extends WritableRepositoryInterface { public function firstOrCreate(array $data): User; public function updateOrCreate(array $search, array $data): User; }
Comandos Artisan
# Generar repositorio php artisan make:repository User # Generar con opciones php artisan make:repository User --abstract --criteria --interfaces=separate
Configuración
Publica el archivo de configuración:
php artisan vendor:publish --provider="Laymont\PatternRepository\Providers\PatternRepositoryServiceProvider"
Edita config/pattern-repository.php:
return [ 'namespace' => 'App\\Repositories', 'path' => app_path('Repositories'), 'enable_cache' => false, 'cache_ttl' => 60, 'pagination' => [ 'default_per_page' => 15, 'max_per_page' => 100, ], ];
Pruebas
El paquete incluye 39 tests con cobertura de:
- Actions (Create, Update, Delete)
- EloquentRepository
- Concerns (Cacheable, HasCriteria, HasEloquentScopes)
- Criteria (WhereEqualsCriteria)
- Contracts (todas las interfaces)
Ver TESTING.md para más detalles.
Actualizaciones de v4.0.0
- ✅ Soporte para Laravel 13
- ✅ Nuevo
EloquentRepositorybase con traits - ✅ Actions separadas para operaciones CRUD
- ✅ 39 tests automatizados con SQLite en memoria
- ✅ Contratos mejorados (RepositoryInterface, ReadableInterface, WritableInterface)
Para una guía detallada, consulta el archivo TESTING.md.
Contribución
- Haz un fork del repositorio.
- Crea una rama:
git checkout -b feature/nueva-funcionalidad. - Realiza cambios y hace commit:
git commit -m "Agregando...". - Sube:
git push origin feature/nueva-funcionalidad. - Abre un Pull Request.
Donaciones
Si encuentras útil este paquete y deseas apoyar su desarrollo y mantenimiento, puedes considerar hacer una donación.
Zinli
- ID de usuario: 3-002-58546608-36
- Recargar: https://recargas.zinli.com/4nVRQUniFdK8DBfPzzfyzR
Visa Prepagada Zinli
- Número: 4850460061276928
Binance Pay
- Binance Pay ID: 206414132
¡Gracias por tu apoyo!
Licencia
MIT License. Ver LICENSE para más detalles.
laymont/laravel-pattern-repository 适用场景与选型建议
laymont/laravel-pattern-repository 是一款 基于 PHP 开发的 Composer 扩展包,目前已累计 1.15k 次下载、GitHub Stars 达 0, 最近一次更新时间为 2024 年 12 月 29 日, 在 PHP 生态内属于活跃度较高的组件。
它主要适用于以下技术方向: 「pattern」 「repository」 「laravel」 「eloquent」 「criteria」 等业务场景。在实际项目中,围绕这些方向常见需要落地的问题包括:接口对接、性能调优、并发安全、与既有框架(Laravel / ThinkPHP / Yii / Webman 等)的兼容适配,以及生产环境的日志埋点与稳定性保障。
我们在过去多个企业项目中使用过 laymont/laravel-pattern-repository 或与其功能相近的方案,如果你在选型或落地过程中遇到问题,例如 版本兼容、二次改造、私有化封装、与内部系统对接、生产 BUG 排查,欢迎联系我们协助评估。
基于 laymont/laravel-pattern-repository 在你已有业务上做功能扩展、字段裁剪、UI 适配、与内部账号 / 权限 / 日志系统的深度对接。
线上偶发问题、内存泄漏、慢查询、并发异常等排查修复;针对高流量场景做缓存、队列、索引层面的调优。
承接完整的项目从需求 → 设计 → 开发 → 上线 → 长期运维;也可按月提供技术保姆服务。
与 laymont/laravel-pattern-repository 相关的其它包
同方向 / 同关键字的高下载量 PHP Composer 包推荐,方便对比选型:
repository php library
A Laravel package for the Repository Design Pattern.
Laravel 5 - Repositories to the database layer
Inbox pattern process implementation for your Laravel Applications
Structure for the Laravel Service-Repository Pattern
A library for simple pattern matching.
统计信息
- 总下载量: 1.15k
- 月度下载量: 0
- 日度下载量: 0
- 收藏数: 0
- 点击次数: 14
- 依赖项目数: 0
- 推荐数: 0
其他信息
- 授权协议: MIT
- 更新时间: 2024-12-29