BizWorks Toolkit 仅支持生成领域驱动设计(Domain-Driven Design,简称DDD)四层架构代码,暂不支持生成对应于模型-视图-控制器(Model-View-Controller,简称MVC)三层架构的代码。您可以参考本文从本地实体类快速生成各层代码。
步骤一:创建配置文件
配置文件并非必需。如果未提供配置文件,系统将采用默认值进行生成。如果默认值无法满足需求,请您创建新的配置文件。
配置文件的路径为:
.bizworks/genConfig.yaml
。在每次代码生成之前,系统会首先读取最新的配置内容。配置文件的位置和名称应保持一致,以确保系统能够正确读取和应用配置。
在项目根目录的 .bizworks
文件夹右击,选择 。
系统将会生成一份名为genConfig.yaml
的配置文件,代码示例如下:
bizworks:
generation:
# # 注释掉的配置为默认值, 如果需要自定义, 请按需删除行最前方的注释 '#" 符号
# # 全局配置
# global:
# # 指定输出目录; 默认值: ${vcsRoot}
# # ${vcsRoot} 为可以找到的第一个 git 项目根目录; 项目根目录.例:${vcsRoot}/模块名/src/main/java
# baseDir: "${vcsRoot}"
# # 作者名 默认值: bizworks:
# author: "bizworks: ${userName}"
# # 默认源码合并策略(src 下)
# defaultMergeStrategy: merge
appTemplate:
# # 模板名称, 目前只支持 DDD.
# name: DDD
projectMetadata:
basePackage: "com.demo.sample"
scaffoldMetadata:
# # 结构对象: DTO
# structuralObject:
# # 源码目录
# sourceDir: "${baseDir}/${boundedContextCode}/${boundedContextCode}-client/src/main/java"
# # 结构对象包名,可以通过拼接的方式注入 basedPackage 和限界上下文编码,甚至是聚合跟等编码
# package: "${basePackage}.${boundedContextCode}.client.api.dto"
# # 是否生成, 默认为 true
# # 注意,generate 为 false 虽然实际不会生成,但是脚手架认为存在该部分内容来处理,即其他项仍可能包含该依赖;其他配置仍然有效
# generate: true
# # 合并策略
# mergeStrategy: "${defaultMergeStrategy}"
# # 在需要的情况下,从 Entity 生成的 name
# nameFromEntity: "${entityName}DTO"
# # 结构对象: pageInfo DTO
# pageInfo:
# sourceDir: "${baseDir}/${boundedContextCode}/${boundedContextCode}-client/src/main/java"
# package: "${basePackage}.${boundedContextCode}.client.api.dto"
# generate: true
# mergeStrategy: "${defaultMergeStrategy}"
# nameFromEntity: "${entityName}PageInfo"
# # 接口定义,(Controller 超类)
# clientInterface:
# sourceDir: "${baseDir}/${boundedContextCode}/${boundedContextCode}-client/src/main/java"
# package: "${basePackage}.${boundedContextCode}.client.api"
# generate: true
# mergeStrategy: "${defaultMergeStrategy}"
# nameFromEntity: "${entityName}ServiceI"
# controller:
# sourceDir: "${baseDir}/${boundedContextCode}/${boundedContextCode}-entry/src/main/java"
# package: "${basePackage}.${boundedContextCode}.entry.service"
# generate: true
# mergeStrategy: "${defaultMergeStrategy}"
# nameFromEntity: "${entityName}ServiceController"
# applicationService:
# sourceDir: "${baseDir}/${boundedContextCode}/${boundedContextCode}-app/src/main/java"
# package: "${basePackage}.${boundedContextCode}.app.api"
# generate: true
# mergeStrategy: "${defaultMergeStrategy}"
# nameFromEntity: "${entityName}Service"
# applicationServiceImpl:
# sourceDir: "${baseDir}/${boundedContextCode}/${boundedContextCode}-app/src/main/java"
# package: "${basePackage}.${boundedContextCode}.app.service"
# generate: true
# mergeStrategy: "${defaultMergeStrategy}"
# nameFromEntity: "${entityName}ServiceImpl"
# structuralObjectConverter:
# sourceDir: "${baseDir}/${boundedContextCode}/${boundedContextCode}-app/src/main/java"
# package: "${basePackage}.${boundedContextCode}.app.converter"
# generate: true
# mergeStrategy: "${defaultMergeStrategy}"
# nameFromEntity: "${entityName}DtoConverter"
# entity:
# sourceDir: "${baseDir}/${boundedContextCode}/${boundedContextCode}-domain/src/main/java"
# package: "${basePackage}.${boundedContextCode}.domain.model"
# generate: true
# mergeStrategy: "${defaultMergeStrategy}"
# valueObject:
# sourceDir: "${baseDir}/${boundedContextCode}/${boundedContextCode}-domain/src/main/java"
# package: "${basePackage}.${boundedContextCode}.domain.model"
# generate: true
# mergeStrategy: "${defaultMergeStrategy}"
# domainService:
# sourceDir: "${baseDir}/${boundedContextCode}/${boundedContextCode}-domain/src/main/java"
# package: "${basePackage}.${boundedContextCode}.domain.service"
# generate: true
# mergeStrategy: "${defaultMergeStrategy}"
# nameFromEntity: "${entityName}Service"
# repository:
# sourceDir: "${baseDir}/${boundedContextCode}/${boundedContextCode}-domain/src/main/java"
# package: "${basePackage}.${boundedContextCode}.domain.repository"
# generate: true
# mergeStrategy: "${defaultMergeStrategy}"
# nameFromEntity: "${entityName}Repository"
# repositoryImpl:
# sourceDir: "${baseDir}/${boundedContextCode}/${boundedContextCode}-infrastructure/src/main/java"
# package: "${basePackage}.${boundedContextCode}.infrastructure.repository"
# generate: true
# mergeStrategy: "${defaultMergeStrategy}"
# nameFromEntity: "${entityName}RepositoryImpl"
# dataObject:
# sourceDir: "${baseDir}/${boundedContextCode}/${boundedContextCode}-infrastructure/src/main/java"
# package: "${basePackage}.${boundedContextCode}.infrastructure.tunnel.dataobject"
# generate: true
# mergeStrategy: "${defaultMergeStrategy}"
# nameFromEntity: "${entityName}DO"
# dataObjectConverter:
# sourceDir: "${baseDir}/${boundedContextCode}/${boundedContextCode}-infrastructure/src/main/java"
# package: "${basePackage}.${boundedContextCode}.infrastructure.converter"
# generate: true
# mergeStrategy: "${defaultMergeStrategy}"
# nameFromEntity: "${entityName}DoConverter"
# dao:
# sourceDir: "${baseDir}/${boundedContextCode}/${boundedContextCode}-infrastructure/src/main/java"
# package: "${basePackage}.${boundedContextCode}.infrastructure.tunnel.database"
# generate: true
# mergeStrategy: "${defaultMergeStrategy}"
# nameFromEntity: "${entityName}Mapper"
配置文件中的注释部分为默认配置,即在配置文件缺失或未配置相关项的情况下,将使用该项的默认值。如需进行修改,请去掉行首的注释符号
#
,并注意保持缩进格式。名为
basePackage
的配置项在配置文件生成时,其值为 Toolkit 自动推测的值,请根据实际情况进行验证并进行相应更改。
内置变量
配置文件的
global
块内部可使用以下变量:vcsRoot
: 表示当前 Project 可以找到的第一个 Git 项目根目录或项目根目录。userName
: 表示当前登录的 BizWorks 平台用户名。
配置文件的
scaffoldMetadata
块内部可使用的变量,在global
块的基础上新增以下变量:baseDir
:global
中配置的baseDir
值。defaultMergeStrategy
:global
中配置的defaultMergeStrategy
值。boundedContextCode
: 限界上下文编码。basePackage
:projectMetadata
中配置的basePackage
值。entityName
: 对应的 Entity 类的名称。
步骤二:生成代码
在生成代码前,请确保项目已在 IDE 中正确打开,并能够通过该环境成功编译。
生成的代码内容为包含了基础增删改查功能的模板,仅供参考,以提高效率。生成内容会随着 BWAF 框架的迭代而变化,因此需根据具体项目情况进行进一步的调整和修改,请勿直接将其当作生产可用的代码发布。
在标记了 DomainObject
或ValueObject
的类上右键单击后,选择 。
以下几点虽然不影响代码生成,但会对编译和运行产生影响:
实体/值对象类须标记
Data
注解(或 Getter、Setter),否则生成的 Converter 类将无法正确拷贝和转换属性值。实体应包含名为
id
的字段,建议使用Long
类型。否则,需在代码生成后自行修改相关代码以串接流程。