damianopetrungaro / clean-architecture
一个用于在PHP中构建清洁应用的工具包
Requires
- php: >=7.1
Requires (Dev)
- codeclimate/php-test-reporter: ^0.4.4
- phpunit/phpunit: ^6.1
README
用于隔离你的领域代码与框架依赖的包
什么是领域、应用和基础设施层? 点击此处 了解概述。
为什么?
你为什么编写这个包?
当我编码时,我通常将领域层从应用层和基础设施层隔离,每次我都需要重新构建一组帮助我做到这一点的对象。
这些对象通常是请求、响应和一些错误。
这个包是为了我而生的,为了避免重新构建这样的对象集,也避免了从不同的项目中复制粘贴。
为什么你应该将你的领域代码从应用和基础设施依赖中隔离出来?
想象一下,你的PHP应用目前是基于Laravel框架构建的。
使用现代框架(如Laravel、Symfony或Slim)是非常好的,它可以帮助你写出更好的代码,而不必重新发明轮子。
但是,如果你因为性能、架构或其他原因想要/必须将当前框架切换到另一个框架怎么办?
通常这非常痛苦,你会感到沮丧,不想改变它。这个选择会绑定你到一个可能不如之前好的工具。
这只是一个例子。还有许多其他原因会让你想要更换框架。
我如何进行隔离?
使用一些DDD概念,你可以完全(或几乎)将你的领域代码从应用层(例如Laravel)和基础设施层(例如Postgresql或Mysql)中隔离出来。
因此,我的应用程序的领域不再隶属于特定的框架/包/数据库,可以“轻松”切换。
是什么帮助我实现这个包?
有一些书籍帮助我“思考”这种方式。以下是一些:
一份简短的文档
-
通用
-
集合
-
集合
一个用于替代对象数组接口的接口。
-
ArrayCollection
使用PHP数组实现的集合实现。
-
-
枚举
-
枚举
用于在PHP中提供枚举支持。
-
ReflectionEnum
使用反射实现的枚举实现。
-
-
-
映射器
-
映射器
用于将对象转换为数组和相反的接口。
-
UserMapper
用于将用户实例转换为数组和相反的接口。
-
-
持久化
-
事务
用于跨边界上下文事务的接口。
-
-
用例
-
用例
用于隔离用例与请求(CLI、HTTP...)的接口。
-
错误
-
错误
领域中的通用错误表示。错误将使用类型和代码进行指定。
-
AbstractError
ErrorInterface的抽象实现。
-
ErrorType
扩展枚举的接口,用于指定你的领域的所有错误类型。
-
AbstractErrorType
ErrorType的实现。
-
-
请求
-
请求
用于将数据从基础设施/应用程序传递到领域中的DTO接口。
-
CollectionRequest
使用集合实现的请求实现。
-
-
响应
-
响应
用于将数据从领域传递到基础设施/应用程序的接口,它使用两个主要属性:Errors:传递所有“错误”Data:传递所有其他“数据/信息”
-
CollectionResponse
使用集合实现的响应。
-
-
验证
-
ValidableRequest
一个接口,用于在自请求内部验证请求数据。
-
ValidableUseCase
一个接口,用于在UseCase内部验证请求数据。
-
-
实际例子
-
这是一个使用Slim微框架和整洁架构包实现的用户TODO列表的简单示例。如有疑问或信息,请添加问题。
变更日志
[0.4] 2018-06-01
- [BC] 向
Enum
接口添加了一个类型提示。您需要调整实现此接口的类(或扩展ReflectionEnum
类)中的equals
方法。