healios/cqrs

此包的最新版本(v1.0.17)没有提供许可证信息。

用于 symfony 集成的 Healios 核心类

此包的官方仓库似乎已不存在,因此该包已被冻结。

安装: 4

依赖者: 0

建议者: 0

安全: 0

类型:symfony-bundle

v1.0.17 2023-12-29 11:06 UTC

This package is auto-updated.

Last update: 2024-01-29 11:21:20 UTC


README

核心包是一个可重用的库,它提供了构建项目内部微服务所需的基本功能和常用类。它通过促进代码重用和维护共享功能,作为开发一致且高效的微服务的基础。

安装

在 Symfony 项目中安装此包,请运行 composer require healios/core

目的

核心包旨在

  • 减少微服务之间的代码重复。
  • 确保类结构、接口和常见操作的致性。
  • 为常用类和实用程序提供一个集中位置。

关键类

查询和查询处理器

查询接口代表微服务中的只读操作或数据检索请求。

使用方法:要实现新的查询,创建一个实现查询接口的类,并定义必要的属性和方法。相应的查询处理器应实现执行查询并返回所需数据的逻辑。

命令和命令处理器

命令接口代表写操作或修改系统状态或触发微服务内的副作用。

使用方法:要实现新的命令,创建一个实现命令接口的类,并定义所需的属性和方法。相应的命令处理器应实现处理命令并执行必要操作的逻辑。

仓库

AbstractDoctrineRepository 是一个基类,它为使用 Doctrine ORM(对象关系映射)实现仓库提供了基础。它包括常见功能和应用代码,减少了设置和管理仓库所需的工作量。

使用方法:要为特定实体创建仓库,扩展 AbstractDoctrineRepository 类并根据您的微服务需求进行自定义。根据需要实现查询、过滤、排序和分页的附加方法。

查询参数

QueryParams 类提供了一种标准化的方式将查询参数传递给查询处理器。它封装了可以应用于查询结果的各种过滤、排序和分页选项。

使用方法:扩展 BaseQueryParams 类以创建针对您的微服务查询需求的特定 QueryParams 类。通过添加属性和方法来自定义该类,以表示支持的查询参数及其验证规则。

Messenger + 扇出事件和命令

对于我们的事件,我们在 RabbitMQ 中使用扇出类型,这样我们可以在不同的微服务之间传播消息,一个事件可以在多个微服务中被消费,但不是所有的。

对于不需要在特定微服务中消费的消息的情况,我们使用自定义 序列化器 + UnknownEvent + UnknownEventListener(如有必要,可以扩展它)。命令也是如此。

以下是一个使用自定义序列化器的示例

NNNN_amqp_command_transport:
  dsn: '%env(ENQUEUE_DSN)%'
  serializer: healios_core.messenger.command_serializer
  options:
    exchange:
      name: ex_command
      type: fanout
    queues:
      NNNN_amqp_command_transport: ~
NNNN_amqp_event_transport:
  dsn: '%env(ENQUEUE_DSN)%'
  serializer: healios_core.messenger.event_serializer
  options:
    exchange:
      name: ex_event
      type: fanout
    queues:
      NNNN_amqp_event_transport: ~

注意:需要 symfony/amqp-messenger 6.3.4 或更高版本。

实施和扩展指南

一致性:确保新类的实施遵循核心包中建立的约定和模式。遵循一致的命名约定,使用适当的接口,并保持关注点的清晰分离。

模块化:努力实现组件之间的松散耦合,并保持模块化结构。避免过度依赖,通过保持类独立并专注于特定职责来促进可重用性。

可扩展性:设计类和接口时考虑可扩展性。考虑潜在的将来需求,并允许在不修改核心功能的情况下轻松扩展和定制。

文档:记录添加到核心包的每个类或实用工具的目的、用法和任何特定考虑事项。提供清晰的示例和指南,以帮助开发者理解和采用微服务。

测试:确保核心包以及任何引入的新类或修改有适当的测试覆盖。编写单元测试以验证类和实用工具的行为和功能。