esensi / core
Esensi 的基础组件
Requires
- php: ^8.1
- esensi/loaders: ^v3.0.0
- illuminate/support: ^10.0
- laravelcollective/html: ^6.3
Requires (Dev)
- fakerphp/faker: ^1.21
- mockery/mockery: ^1.5.1
- phpspec/phpspec: ^7.2
- phpunit/phpunit: ^10.0.7
- dev-master
- 3.x-dev
- v3.1.0
- v3.0.6
- v3.0.5
- v3.0.4
- v3.0.3
- v3.0.2
- v3.0.1
- v3.0.0
- 2.x-dev
- v2.1.0
- v2.1.0-beta.1
- v2.0.1
- v2.0.0
- 1.x-dev
- v1.0.3
- v1.0.1
- v1.0.0
- v1.0.0-alpha
- 0.7.x-dev
- 0.6.x-dev
- 0.6.3
- 0.6.2
- 0.6.1
- 0.6.0
- 0.5.x-dev
- 0.5.17
- 0.5.16
- 0.5.14
- 0.5.13
- 0.5.12
- 0.5.11
- 0.5.10
- 0.5.9
- 0.5.8
- 0.5.7
- 0.5.6
- 0.5.5
- 0.5.4
- 0.5.3
- 0.5.2
- 0.5.1
- 0.5.0
- 0.4.x-dev
- 0.3.x-dev
- 0.3.5
- 0.3.4
- 0.3.3
- 0.3.2
- 0.2.5
- 0.2.4
- 0.2.3
- 0.2.2
- 0.2.1
- 0.2.0
- 0.1.11
- 0.1.10
- 0.1.9
- 0.1.8
- 0.1.7
- 0.1.6
- 0.1.5
- 0.1.4
- 0.1.3
- 0.1.2
- 0.1.1
- 0.1.0
- dev-feature/detect-authorization-reponses
- dev-feature/upgrade-laravel-10
- dev-0.6-translations
- dev-0.6-auth
This package is auto-updated.
Last update: 2024-09-10 15:59:22 UTC
README
版本 1
由 Esensi 包组成,由 SiteRocket Labs® 编码。
Esensi/Core
包是构成 Esensi 平台的多个包中的一个,该平台基于 Laravel 构建。Esensi/Core 是其他组件包的基础包。此包为 Esensi 平台的所有其他包提供核心模式和常见的扩展基类。这些组件包括涉及 UI 和 API 控制器类的 Laravel 8.x 兼容的 HMVC 模式、支持单条和批量操作的 Eloquent 模型后端仓库模式等。有关类内部工作原理和组成的更多详细信息,请参阅慷慨的文档化源代码。
注意
此代码专门设计为与 Laravel 框架 兼容,可能不适合作为独立依赖项或作为其他框架的一部分。当前 Esensi/Core
版本的发布也依赖于一些封闭源代码。如果您想获取对这些其他存储库的访问权限,请联系 support@siterocket.com。
快速入门
使用 Composer 安装包
composer require esensi/core
然后向应用程序的 config/app.php 配置文件中添加以下提供者
'providers' => [ Esensi\Core\Providers\CoreServiceProvider::class, Esensi\Core\Providers\HtmlServiceProvider::class, Esensi\Core\Providers\RouteServiceProvider::class, Esensi\Core\Providers\ValidationServiceProvider::class, ]
接下来,发布供应商资源、配置和其他可发布的文件,以进行进一步自定义
php artisan vendor:publish --provider="Esensi\Core\Providers\CoreServiceProvider"
这将发布此包的配置从 config/
目录发布到 Laravel 应用程序的 config/esensi/core/
目录,其中可以在 esensi/core::
命名空间下加载(例如:config('esensi/core::core.aliases')
)。
最后,通过创建实现 Esensi\Core\Contracts
命名空间接口合同或扩展或组合 Esensi\Core
命名空间类和特性契约的类,开始构建应用程序的各个层。
Esensi 的工作方式
Esensi 实现了 MVC 模式的衍生形式,称为分层 MVC (HMVC) 或一些人称之为“正交”架构。本质上,所有领域逻辑都组织在一个领域层中,该层主要由命令、事件、服务类以及当然的熟悉的数据仓库模式组成。此领域层将控制器和视图层与实际模型层分离。模型层主要由 Laravel 的优秀 Eloquent ORM(一个活动记录模式)和 Esensi 的自验证、基于特性的模型扩展包 esensi/model
支持。控制器层由 UI 组成,包括网络 UI 控制器、RESTful API 控制器和 CLI Artisan 命令。UI 控制器扩展 API 控制器的行为,通过视图层提供响应表示。这提供了大量的扩展和重用性,同时使用特性提供了可附加的功能。其他一切要么是约定,要么是语法糖,以帮助使开发更容易、更快。
层次结构示例
想象 Esensi 的架构的一种方法是通过查看常见用例的处理方式。由于 UI 上下文之间有大量代码的重用,因此约定模式(因此称为正交架构)开始出现。例如,典型的 CRUD 操作可以根据 UI 上下文从多个接入点执行,但只有一个业务逻辑的定义。
仓库
开发者可能需要存储一篇新的博客文章。Esensi利用仓储模式,因此调用代码应该加载并调用适当的App\Repositories\PostRepository@store
方法。此仓储方法可能会使用业务逻辑来创建由传递的方法参数描述的文章。通常,这只是一个简单地将请求映射到Esensi模型(如App\Models\Post
),该模型使用Laravel击中数据库,并返回带有新文章ID的存储模型。然后,活动记录模型返回给调用服务类,该类可以进一步操作它或将它传递给其他服务类。仓储模式对于定义数据层和调用类(通常是UI上下文类)之间的障碍至关重要。
API控制器
移动应用客户端请求POST /api/posts
。此请求由Laravel路由到App\Http\Apis\PostApi@store
控制器方法。API控制器只关心请求,根本不关心框架如何处理将返回值转换为JSON响应。API控制器将请求参数映射为仓储方法(如App\Repositories\PostRepository@store
)的参数。在此点,所有业务逻辑都作为调用链中的重用,因为客户端请求已映射到之前定义的仓储。一旦从App\Repositories\PostRepository
返回App\Models\Post
模型,该模型就简单地返回到Laravel框架,以默认转换为JSON响应。API可以拥有所有领域逻辑组织在仓储中,但以前端或移动应用友好的RESTful JSON表示形式。
UI控制器
网络浏览器客户端请求POST /admin/posts
。此请求由Laravel路由到App\Http\Controllers\PostController@store
控制器方法。此控制器只关心响应,因此它立即调用其父App\Http\Apis\PostApi@store
控制器方法。在此点,所有业务逻辑都作为调用链中的重用,因为客户端请求已映射到API控制器,如之前定义。一旦从App\Http\Apis\PostApi
返回App\Models\Post
模型,该模型随后传递给Blade视图进行HTML表示格式化。然后,Laravel视图由PostController
返回到框架,在客户端作为HTML响应渲染。Web UI可以拥有与API类似的所有能力,所有业务逻辑都可以保持DRY,因为它组织在领域层。
参数化
其他API端点可能指向可筛选的资源,例如GET /api/posts?page=1&order=id&sort=asc
,这将返回按id
属性排序且按升序排序的App\Models\Post
结果的第一页。因为这种逻辑定义在App\Repositories\PostRepository
领域层类中,所以这种功能对所有UI上下文(包括管理网络UI)都可用。只需更改URL前缀,就可以将正常的API响应处理成HTML表格表示:GET /admin/posts?page=1&order=id&sort=asc
。
此外,中间件类可以用于进一步处理响应格式,例如将RESTful API响应的JSON表示转换为XML文档或CSV导出(例如:?format=xml
)。将业务逻辑限制在领域层使Esensi应用程序能够做出更灵活的构建选择,并实现更大的代码重用,从而提高可维护性。Esensi/Core只是惯例和基类工具箱,可以扩展以在Laravel应用程序中继续使用此构建示例。
贡献
感谢您考虑为Esensi Core做出贡献!
许可
版权(c)2022 SiteRocket Labs
Esensi Core是开源软件,根据MIT许可授权。