ticaje/booking-api

基于Hexagonal Design模式的PHP中间件,用于定义任何基于PHP解决方案的预订用例

1.0.7 2022-12-27 09:52 UTC

This package is auto-updated.

Last update: 2024-09-27 13:38:37 UTC


README

GPLv3 License Latest Version on Packagist Quality Score Total Downloads Blog

前言

这是一个使用Hexagonal Design模式连接基于预订的解决方案(这些解决方案定义在特定的框架/平台上,甚至是基于PHP的独立解决方案)与特定API的中间件。这个库创建了高级策略和标准用例来建模预订领域。

安装

composer require ticaje/booking-api

高级策略

预订业务涉及预订,因此关键领域对象是

预订主题:酒店房间、汽车等。从现在起我们将其称为:主要领域资源。

这是预订领域的核心价值对象。是建模的主要主题。

日历

价值对象的主要上下文是日历,因为预订意味着基于时间(天、小时)进行预订。在此领域组件中定义的政策与根据具体主要领域资源启用/禁用的日历日期或时间段相关。

价格

预订受到客户必须为该商品或服务支付的价格的影响。有一系列仅属于领域地面的价格规则,这些政策依赖于日历对象,并且与日历的政策保持一致。我们的API定义了基本/标准的价格规则,这些规则可以通过API的消费者扩展。我们的API计算价格的方式可以通过利益相关者扩展。

可用性

与价格类似,可用性是另一个处理预订占用当前业务的领域对象。此领域组件依赖于日历对象,并且其政策与日历的政策保持一致。

用例

用例是期望系统满足特定业务目标(特定演员需要)的领域场景,因此它与系统的交互。它有前提条件、后置条件、业务规则和流程(正常和替代)。基本上,用例代表演员对系统的请求,系统本身根据业务政策响应此类请求。为了粒度和关注点分离原则,高级系统是基于用例构建的。

用例示例

一个用例的示例可以是

  • 获取给定业务资源及特定日期的可用性。
  • 获取给定业务资源及特定日期的价格。

低级详细基础

我们实施了一种基于特定用例的方法,该方法涉及一个基于六边形的库,称为ticaje/hexagonal。这个库允许我们注入任何基于用例的低级库,该库使用Bus/Command/Handler设计模式来处理用例。

一开始可能会觉得它复杂而高级,但实际上恰恰相反。Bus/Command/Handler(总线/命令/处理器)的核心理念是创建一个用例,并通过创建命令来实现它。使用如Tactician(我们注入的库)这样的库,通过总线组件将命令映射到处理器,以编排业务模型。处理器接收一个业务DTO(数据传输对象),该对象可以在应用服务或处理器本身中被解释。在我们的当前解决方案中,我们创建了应用服务,这样就可以在不使用用例方法的情况下被外部机构消费。使用用例方法的区别在于,我们可以通过实例化一个命令,将其传递给适当的总线方法来调用它,处理器完成剩余的工作。

完全六边形架构

DTO(数据传输对象)是解耦数据持久化与领域对象的关键,因为它由一个接口或服务契约来管理,该契约封装了领域策略以接收领域理解的请求数据,因此消费者有责任将其转换为一个领域期望的有效类型。

此外,它可以包含在任何平台或应用中,因为它独立于任何基础设施相关机构创建,它仅依赖于几个底层库,这些库对丰富机构的依赖性不大。

您可以在任何框架或平台中使用它,您可以自由地使用依赖注入(我推荐的方法)或手动实例化(用于独立应用程序),但我不是很推荐这种方法,因为它可能会影响敏捷目标。六边形架构的核心理念是使用DI(依赖注入)框架,例如Laravel或Symfony等,这些框架已经包含了一个DI框架。