antonyan/ddd-mappers-infrastructure


README

基础设施层,用于基于数据映射器作为数据源模式DDD项目,数据映射器Data Mapper

概述

如果您使用此层与DDD项目,所有功能将自动插入。入口点是应用类。它使用Symfony HttpKernel作为引擎。

主要流程

  1. 应用从请求中获取控制器(表现层服务)和方法。
  2. 请求预处理事件调度:过滤、验证等。
  3. 调用控制器。

依赖管理

当前应用程序的架构意味着主要业务逻辑将放在服务中。每个模块和上下文都将有代表服务。服务扩展BaseService,从"config"文件夹的上一级获取容器(依赖注入)和配置。在此之上,为每个服务的容器会自动与基础设施容器合并。

基础设施容器

基础设施容器包括数据库连接、MySqlClient、RequestFactory、HttpClient。

数据库交互

连接

如果您使用MySQL作为数据库,您应指定DDD_RBD_NAME、DDD_RBD_USER、DDD_RBD_PASSWORD、DDD_RBD_HOST、DDD_RBD_DRIVER(pdo_mysql)作为环境变量,或者在DDD项目的.env文件中指定。

DbMapper

为了快速应用程序开发(RAD),我们创建了一个名为DbMapper的抽象。如果您只需要CRUD实现,它将直接支持。您只需要在模块配置中指定表和字段映射。对于创建和更新,您需要指定标识符名称。配置示例

'DeliveryDbTranslator' => [
        'table' => 'deliveries',
        'columns' => [
			'id' => 'deliveries.id',
			'deliveryCostId' => 'deliveries.deliveryCostId',
			'orderId' => 'deliveries.orderId',
			'status' => 'deliveries.status',
			'deliveryTime' => 'deliveries.deliveryTime',
			'locationId' => 'deliveries.locationId',
			'deliveryPhone' => 'deliveries.deliveryPhone',
			'contactPerson' => 'deliveries.contactPerson',
			'notice' => 'deliveries.notice',
        ],
        'create' => 'id',
        'update' => ['id'],
    ],

HTTP交互

HttpMapper

如果您需要从另一个服务(通过HTTP(s))获取资源,您可以使用类似DbMapper的HTTP映射器。配置示例

return [
    'httpConfig' => [
        'availableUrls' => [
            'get' => getenv('SOME_MICROSERVICE_BASE_URL').'/users/:id',
        ]
    ],
];

日志记录

为了日志记录目的,我们使用Monolog,但我们当然将其封装以消除依赖。我们支持将日志记录到文件和到CloudWatch。要使用日志记录,您应该创建服务(示例)

class SomeLogger extends LogService
{
    /**
     * @return string
     */
    protected function getChannelName(): string
    {
        return "specific-channel-name";
    }

}

此外,您应该指定环境变量以指定日志目的地LOGGING_TYPE = file或LOGGING_TYPE = cloudWatch

自定义服务

  • application.error.handler是保留服务,用于覆盖以在异常上处理API失败响应