bornfight / maboo-maker-bundle
分层架构项目的模板代码生成器。灵感来源于Maboo
v0.6.2
2024-09-23 13:09 UTC
Requires
- php: 8.*
Requires (Dev)
- symfony/maker-bundle: ^1.36
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
将启动交互式向导,询问您需要哪些组件,然后内部依次执行所有选定的命令。
常规路径
生成具有字段标量类型的实体
- 运行
bin/console make:maboo-scaffold
- 遵循交互式向导
- 选择所有可用选项(这是默认选项,因此只需按 ↵ Return 确认即可)
- 选择现有模块或创建新模块。在项目源目录(
src/
)中的现有文件夹被建议,因此您可以按 ⇥ Tab 使用自动完成。
示例:Booking
- 输入实体名称(现在,当您开始输入时,也会建议现有实体,但更新目前不支持)。
示例:Hotel
这将在src/Shared/Infrastructure/Persistence/Doctrine/Entity
中创建一个类 - 所有类都将建议此实体名称,但您可以选择覆盖任何一个。如果您想保留默认设置,只需按 ↵ Return 确认即可。
- 领域模型 名称:
Hotel
这将在src/Booking/Domain/Model
中创建一个类 - 实体映射器 名称:
HotelMapper
这将在src/Shared/Infrastructure/Persistence/Doctrine/Mapper
中创建一个类 - 写模型 名称:
CreateHotel
和UpdateHotel
这将在src/Booking/Domain/WriteModel
中创建类 - 存储库 接口和类名称:
HotelRepository
和DoctrineHotelRepository
这将在src/Booking/Domain/Repository
中创建一个接口,并在src/Booking/Infrastructure/Persistence/Repository
中创建一个类 - 基本 规范 接口和类名称:
IsExistingHotelSpecification
和DoctrineIsExistingHotelSpecification
这将在src/Booking/Application/Specification
中创建一个接口,并在src/Booking/Infrastructure/Specification
中创建一个类 - 验证器 名称:
HotelValidator
这将在src/Booking/Application/Validator
中创建一个类 - 管理器 名称:
HotelManager
这将在src/Booking/Application/Manager
中创建一个类 - 解析器 名称:
HotelResolver
这将在src/Booking/Infrastructure/GraphQL/Resolver
中创建一个解析器类 - 突变 名称:
HotelMutation
这将在src/Booking/Infrastructure/GraphQL/Mutation
中创建一个突变类 - 固定 名称:
HotelFixures
这将在src/Booking/Infrastructure/Persistence/DataFixtures
中创建一个固定类
- 领域模型 名称:
- 添加字段
示例:name
(字符串,255,非空),isOpen
(布尔值,非空),address
(字符串,255,非空),longitude
(浮点数,可空),latitude
(浮点数,可空) - 再按一次 ↵ Return。
- 生成并应用迁移(这些是Doctrine命令,与生成器无关)
bin/console make:migration
bin/console doctrine:migration:migrate
- 向固定中添加一些有意义的 数据或仅根据字段类型加载预生成的模拟数据
在控制台运行 bin/console doctrine:fixtures:load
- 生成GraphQL模式
- 运行
bin/console make:maboo-gql-schema
- 选择模块(
预订
)和您刚生成的实体(酒店
)
这将在/config/graphql/types
目录中更新现有的Query.types.yaml
和Mutation.types.yaml
文件。
这还在src/Booking/Infrastructure/Resources/config/graphql/types
中创建GraphQL输入、负载和类型模式文件。
- 运行
- 🚀 完成了!
现在尝试在您喜欢的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
,这使得它们无法扩展,只能覆盖逻辑的一部分。