damianopetrungaro/clean-architecture

一个用于在PHP中构建清洁应用的工具包

v0.4.0 2018-06-01 12:06 UTC

This package is auto-updated.

Last update: 2024-09-07 05:24:08 UTC


README

Code Climate Build Status

用于隔离你的领域代码与框架依赖的包

什么是领域、应用和基础设施层? 点击此处 了解概述。

为什么?

你为什么编写这个包?

当我编码时,我通常将领域层从应用层和基础设施层隔离,每次我都需要重新构建一组帮助我做到这一点的对象。

这些对象通常是请求、响应和一些错误。

这个包是为了我而生的,为了避免重新构建这样的对象集,也避免了从不同的项目中复制粘贴。

为什么你应该将你的领域代码从应用和基础设施依赖中隔离出来?

想象一下,你的PHP应用目前是基于Laravel框架构建的。

使用现代框架(如Laravel、Symfony或Slim)是非常好的,它可以帮助你写出更好的代码,而不必重新发明轮子。

但是,如果你因为性能、架构或其他原因想要/必须将当前框架切换到另一个框架怎么办?

通常这非常痛苦,你会感到沮丧,不想改变它。这个选择会绑定你到一个可能不如之前好的工具。

这只是一个例子。还有许多其他原因会让你想要更换框架。

我如何进行隔离?

使用一些DDD概念,你可以完全(或几乎)将你的领域代码从应用层(例如Laravel)和基础设施层(例如Postgresql或Mysql)中隔离出来。

因此,我的应用程序的领域不再隶属于特定的框架/包/数据库,可以“轻松”切换。

是什么帮助我实现这个包?

有一些书籍帮助我“思考”这种方式。以下是一些:

清洁PHP

PHP中的DDD

Evans的DDD

一份简短的文档

  • 通用

    • 集合

      • 集合

        一个用于替代对象数组接口的接口。

      • ArrayCollection

        使用PHP数组实现的集合实现。

    • 枚举

      • 枚举

        用于在PHP中提供枚举支持。

      • ReflectionEnum

        使用反射实现的枚举实现。

  • 映射器

    • 映射器

      用于将对象转换为数组和相反的接口。

    • UserMapper

      用于将用户实例转换为数组和相反的接口。

  • 持久化

    • 事务

      用于跨边界上下文事务的接口。

  • 用例

    • 用例

      用于隔离用例与请求(CLI、HTTP...)的接口。

    • 错误

      • 错误

        领域中的通用错误表示。错误将使用类型和代码进行指定。

      • AbstractError

        ErrorInterface的抽象实现。

      • ErrorType

        扩展枚举的接口,用于指定你的领域的所有错误类型。

      • AbstractErrorType

        ErrorType的实现。

    • 请求

      • 请求

        用于将数据从基础设施/应用程序传递到领域中的DTO接口。

      • CollectionRequest

        使用集合实现的请求实现。

    • 响应

      • 响应

        用于将数据从领域传递到基础设施/应用程序的接口,它使用两个主要属性:Errors:传递所有“错误”Data:传递所有其他“数据/信息”

      • CollectionResponse

        使用集合实现的响应。

    • 验证

      • ValidableRequest

        一个接口,用于在自请求内部验证请求数据。

      • ValidableUseCase

        一个接口,用于在UseCase内部验证请求数据。

实际例子

  • Slim

    这是一个使用Slim微框架和整洁架构包实现的用户TODO列表的简单示例。如有疑问或信息,请添加问题。

变更日志

[0.4] 2018-06-01

  • [BC] 向Enum接口添加了一个类型提示。您需要调整实现此接口的类(或扩展ReflectionEnum类)中的equals方法。