Flutter代码生成插件ednet_code_generation的使用

发布于 1周前 作者 songsunli 来自 Flutter

Flutter代码生成插件ednet_code_generation的使用

简介

EDNet Code Generation 是一个基于命令行(CLI)驱动且程序化的代码生成器,专门用于 EDNet Core 的领域模型。通过 EDNet Code Generation,您可以将基于 YAML 的领域定义转换为完全模块化的、面向领域的 Dart 项目——帮助您减少样板代码并使代码与业务逻辑保持紧密一致。

Pub Version
License


功能

以下是 EDNet Code Generation 的主要功能:

  1. YAML → Dart: 从简单的 YAML 模型描述开始,并生成以下内容:

    • Repository(仓库)
    • 实体及其属性
    • 关系定义
    • 测试与文档的脚手架
  2. 无缝集成: 生成的项目可以无缝集成到 EDNet 生态系统 中,包括 ednet_coreednet_cms 等。

  3. 两种生成模式:

    • --genall: 创建全新的 Dart 项目结构(适用于新领域)。
    • --gengen: 更新或重新生成现有项目的代码,而不会覆盖顶层配置。
  4. 多模型支持: 可以在一个命令中生成多个领域模型,例如 financehrsales 等。


安装

在您的 pubspec.yaml 文件的 dev_dependencies 部分添加 EDNet Code Generation

dev_dependencies:
  ednet_code_generation: ^0.0.5

然后获取包:

dart pub get

或者使用 Flutter:

flutter pub get

注意: 为了获得最佳效果,请确保同时包含 ednet_core 在依赖项或开发依赖项中。


快速入门

以下是生成新的领域驱动 Dart 项目的逐步指南。我们假设您有一个描述领域模型的 YAML 文件,例如:

示例 YAML 文件 (lib/requirements/financial/ledger.yaml):

domain: Financial
model: Ledger

concepts:
  - name: Account
    attributes:
      - name: accountNumber
        type: string
      - name: balance
        type: number

  - name: Transaction
    attributes:
      - name: amount
        type: number
      - name: transactionDate
        type: datetime
      - name: description
        type: string

relations:
  - from: Account
    fromToName: transactions
    to: Transaction
    toFromName: account
    fromToCardinality:
      min: 0
      max: N
    toFromCardinality:
      min: 1
      max: 1

步骤 1: 组织 YAML 文件

将您的 .yaml 文件放在一个可引用的路径下,例如 lib/requirements/financial/ledger.yaml

步骤 2: 运行生成器

在项目中运行 EDNet Code Generation CLI:

dart run ednet_code_generation:main \
  --genall lib/requirements/financial \
  build/financial_dart_project \
  financial ledger

参数说明:

  • --genall: 指令生成器创建完整的 Dart 项目。
  • lib/requirements/financial: YAML 文件所在的基准目录。
  • build/financial_dart_project: 新项目的输出目录。
  • financial ledger: 域名 (financial) 和模型名称 (ledger)。

完成后,检查 build/financial_dart_project,您会看到以下结构:

build/financial_dart_project/
  ├─ lib/
     ├─ financial_ledger.dart
     ├─ repository.dart
     ├─ financial/
        ├─ ledger/
           ├─ model.dart
           ├─ json/
              ├─ data.dart
              ├─ model.dart
           ├─ account.dart
           ├─ transaction.dart
        └─ domain.dart
  ├─ test/
     ├─ financial/ledger/...
  ├─ doc/
  ├─ .gitignore
  ├─ pubspec.yaml
  └─ README.md

步骤 3: 探索与定制

  • lib/financial_ledger.dart: 领域模型库的主要入口。
  • repository.dart: 定义了包含您的领域模型的 CoreRepository
  • account.darttransaction.dart: 表示领域概念的 Dart 类。
  • test/: 自动生成的测试脚手架,帮助您快速启动 TDD/BDD 开发。
  • pubspec.yaml: 引用了 ednet_core 和其他依赖项的基本文件。

高级用法

1. 在现有项目中重新生成

如果您对 YAML 文件中的领域模型进行了更改,可以使用 --gengen 参数更新现有项目:

dart run ednet_code_generation:main \
  --gengen build/financial_dart_project

这将更新内部的 Dart 库文件,而不会覆盖顶层配置(如 pubspec.yaml)。

2. 生成多个模型

可以在单个命令中生成多个模型:

dart run ednet_code_generation:main \
  --genall lib/requirements/financial \
  build/financial_dart_project \
  financial ledger investments accounts

每个模型(如 ledgerinvestmentsaccounts)都需要自己的 YAML 文件。

3. 脚本化方法

可以通过自己的 Dart 代码调用生成器,使用 EDNetCodeGenerator 类:

import 'dart:io';
import 'package:ednet_code_generation/ednet_code_generation.dart';

void main() async {
  final result = await EDNetCodeGenerator.generate(
    sourceDir: 'lib/requirements/financial',
    targetDir: 'build/financial_dart_project',
    domainName: 'financial',
    models: 'ledger',
  );
  print(result); // 'Code generation completed!'
}

更多关于Flutter代码生成插件ednet_code_generation的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html

1 回复

更多关于Flutter代码生成插件ednet_code_generation的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html


ednet_code_generation 是一个用于 Flutter 的代码生成插件,旨在帮助开发者自动生成一些重复性代码,从而提高开发效率。以下是如何使用 ednet_code_generation 插件的基本步骤:

1. 添加依赖

首先,你需要在 pubspec.yaml 文件中添加 ednet_code_generation 插件的依赖。

dependencies:
  flutter:
    sdk: flutter
  ednet_code_generation: ^1.0.0  # 请使用最新版本

dev_dependencies:
  build_runner: ^2.1.0  # 用于运行代码生成器

然后运行 flutter pub get 来获取依赖。

2. 创建模型类

假设你有一个简单的数据模型类,例如 User 类:

class User {
  final String name;
  final int age;

  User({required this.name, required this.age});
}

3. 使用注解

ednet_code_generation 通常通过注解来标记需要生成代码的类或方法。假设插件提供了一个 @Generate 注解,你可以这样使用它:

import 'package:ednet_code_generation/ednet_code_generation.dart';

@Generate()
class User {
  final String name;
  final int age;

  User({required this.name, required this.age});
}

4. 运行代码生成器

使用 build_runner 来生成代码。在终端中运行以下命令:

flutter pub run build_runner build

这将根据你的注解生成相应的代码。生成的代码通常会放在一个 .g.dart 文件中,例如 user.g.dart

5. 使用生成的代码

生成的代码可以自动包含在你的项目中。例如,如果 ednet_code_generation 生成了一个 UserBuilder 类,你可以这样使用它:

import 'user.dart';
import 'user.g.dart';  // 导入生成的代码

void main() {
  var user = UserBuilder()
    .name('John Doe')
    .age(30)
    .build();

  print('User: ${user.name}, Age: ${user.age}');
}

6. 自动重新生成代码

如果你修改了模型类或注解,可以重新运行 build_runner 来更新生成的代码:

flutter pub run build_runner build

或者使用 watch 命令来监听文件变化并自动重新生成代码:

flutter pub run build_runner watch

7. 清理生成的代码

如果你想清理生成的代码,可以运行以下命令:

flutter pub run build_runner clean
回到顶部
AI 助手
你好,我是IT营的 AI 助手
您可以尝试点击下方的快捷入口开启体验!