bornfight/maboo-maker-bundle

分层架构项目的模板代码生成器。灵感来源于Maboo

安装: 2 579

依赖项: 0

建议者: 0

安全: 0

星标: 3

关注者: 6

分支: 0

公开问题: 0

类型:symfony-bundle

v0.6.2 2024-09-23 13:09 UTC

README

分层架构项目的模板代码生成器

安装

要安装此包,请使用Composer

composer require bornfight/maboo-maker-bundle --dev

如果您正在使用 Symfony Flex,这将自动安装并启用Maboo Maker包。
如果不是,您应该手动将其添加到您的 config/bundles.php 文件中

return [
    // ...
    Bornfight\MabooMakerBundle\BornfightMabooMakerBundle::class => ['dev' => true, 'test' => true],
];

用法

有多个可用的命令可以独立工作,但只要可能,您只需运行

bin/console make:maboo-scaffold

当前支持的子命令列表

make:maboo-module        # Creates a bounded context (module) folder (if it does not exist yet)                       
make:maboo-entity        # Creates or updates a Doctrine entity class                                               
make:maboo-domain-model  # Creates or updates a domain model class                                                  
make:maboo-write-models  # Creates or updates write models for a model class                                        
make:maboo-entity-mapper # Creates or updates mapper for a model class                                              
make:maboo-repository    # Creates or updates a repository interface and concrete implementation                    
make:maboo-validator     # Creates or updates a validator and specification                                         
make:maboo-manager       # Creates or updates a resource manager                                                    
make:maboo-resolver      # Creates or updates a resolver                                                            
make:maboo-mutation      # Creates or updates a mutation class          
make:maboo-fixtures      # Creates or updates a fixtures class with some dummy data                                                                                              
make:maboo-gql-schema    # Creates or updates GraphQL types and schema 

make:maboo-scaffold 将启动交互式向导,询问您需要哪些组件,然后内部依次执行所有选定的命令。

常规路径

生成具有字段标量类型的实体

  1. 运行 bin/console make:maboo-scaffold
  2. 遵循交互式向导
    1. 选择所有可用选项(这是默认选项,因此只需按 ↵ Return 确认即可)
    2. 选择现有模块或创建新模块。在项目源目录(src/)中的现有文件夹被建议,因此您可以按 ⇥ Tab 使用自动完成。
      示例: Booking
    3. 输入实体名称(现在,当您开始输入时,也会建议现有实体,但更新目前不支持)。
      示例: Hotel
      这将在 src/Shared/Infrastructure/Persistence/Doctrine/Entity 中创建一个类
    4. 所有类都将建议此实体名称,但您可以选择覆盖任何一个。如果您想保留默认设置,只需按 ↵ Return 确认即可。
      1. 领域模型 名称: Hotel
        这将在 src/Booking/Domain/Model 中创建一个类
      2. 实体映射器 名称: HotelMapper
        这将在 src/Shared/Infrastructure/Persistence/Doctrine/Mapper 中创建一个类
      3. 写模型 名称: CreateHotelUpdateHotel
        这将在 src/Booking/Domain/WriteModel 中创建类
      4. 存储库 接口和类名称: HotelRepositoryDoctrineHotelRepository
        这将在 src/Booking/Domain/Repository 中创建一个接口,并在 src/Booking/Infrastructure/Persistence/Repository 中创建一个类
      5. 基本 规范 接口和类名称: IsExistingHotelSpecificationDoctrineIsExistingHotelSpecification
        这将在 src/Booking/Application/Specification 中创建一个接口,并在 src/Booking/Infrastructure/Specification 中创建一个类
      6. 验证器 名称: HotelValidator
        这将在 src/Booking/Application/Validator 中创建一个类
      7. 管理器 名称: HotelManager
        这将在 src/Booking/Application/Manager 中创建一个类
      8. 解析器 名称: HotelResolver
        这将在 src/Booking/Infrastructure/GraphQL/Resolver 中创建一个解析器类
      9. 突变 名称: HotelMutation
        这将在 src/Booking/Infrastructure/GraphQL/Mutation 中创建一个突变类
      10. 固定 名称: HotelFixures
        这将在 src/Booking/Infrastructure/Persistence/DataFixtures 中创建一个固定类
    5. 添加字段
      示例: name(字符串,255,非空),isOpen(布尔值,非空),address(字符串,255,非空),longitude(浮点数,可空),latitude(浮点数,可空)
    6. 再按一次 ↵ Return
  3. 生成并应用迁移(这些是Doctrine命令,与生成器无关)
    1. bin/console make:migration
    2. bin/console doctrine:migration:migrate
  4. 向固定中添加一些有意义的 数据或仅根据字段类型加载预生成的模拟数据
    1. 在控制台运行 bin/console doctrine:fixtures:load
  5. 生成GraphQL模式
    1. 运行 bin/console make:maboo-gql-schema
    2. 选择模块(预订)和您刚生成的实体(酒店
      这将在 /config/graphql/types 目录中更新现有的 Query.types.yamlMutation.types.yaml 文件。
      这还在 src/Booking/Infrastructure/Resources/config/graphql/types 中创建GraphQL输入、负载和类型模式文件。
  6. 🚀 完成了!

现在尝试在您喜欢的GraphQL GUI中运行查询

query {
  hotels {
    id
    name
    isOpen
    address
    longitude
    latitude
  }
}

您应该得到类似

{
  "data": {
    "hotels": [
      {
        "id": "a89b8a17-3b15-4a23-9ad0-67229f13fc18",
        "name": "example",
        "isOpen": true,
        "address": "example",
        "longitude": 20.5,
        "latitude": 20.5
      }
    ]
  }
}

它工作了!

尝试运行一个变异(默认情况下,您必须具有管理员权限)

mutation {
  createHotel(input: {
    name: "Westin"
    isOpen: false
    address: "Izidora Kršnjavoga 1, 10000 Zagreb"
    longitude: 45.80689045084249
    latitude: 15.9662605177903
  }) {
    hotel {
      id
    }
  }
}

响应应包含新创建的酒店的ID

{
  "data": {
    "createHotel": {
      "hotel": {
        "id": "061a7975-4334-4d00-9a00-4243ac4a9726"
      }
    }
  }
}

动机

这个包应该让创建大量具有大量样板代码的文件变得轻而易举。
复制粘贴现有的实体和模型,然后只重命名一些字段可能会很繁琐且容易出错。这同样是一项耗时的工作,让人感觉像是一个编码猴子。我们使用了一些严格的规则,而不是在现有类中寻找类比并进行大量手动工作,这个生成器会为您完成这些。

其实施受到了Symfony的生成器包的很大影响。其中的某些代码部分实际上是复制粘贴的,因为提到的包中有些类被声明为final,这使得它们无法扩展,只能覆盖逻辑的一部分。