迁移到新的 ORM 并不容易,且过渡成本对许多组织来说可能是难以承受的。尽管我们开发者对「Shiny New Things」充满热情,现实中我们很少有机会参与真正的「绿地」(green‑field)项目。大多数职业生涯中,我们在受限于诸多技术与商业约束(即遗留系统)的情境下工作,限制了我们前进的选项。想要成功的技术创新者,需要提供互操作能力与集成路径,帮助组织无缝迁移到解决现有问题的新方式。
为了降低迁移到 Ent(或仅仅是尝试 Ent)的成本,我们启动了 "Schema Import Initiative",来支持从外部资源生成 Ent 模式的多种用例。该项目的核心是 schemast 包(源代码,文档),它使开发者能够轻松编写程序来生成和操作 Ent 模式。使用此包,开发者可以在高层 API 上编程,免去对代码解析和 AST 操作的担忧。
Protobuf Import 支持
第一个使用此新 API 的项目是 protoc-gen-ent,一个 protoc 插件,用来从 .proto 文件生成 Ent 模式(文档)。已有在 Protobuf 中定义模式的组织可以利用此工具自动生成 Ent 代码。例如,给出一个简单的消息定义:
syntax = "proto3";
package entpb;
option go_package = "github.com/yourorg/project/ent/proto/entpb";
message User {
string name = 1;
string email_address = 2;
}
并将 ent.schema.gen 选项设置为 true:
syntax = "proto3";
package entpb;
+import "options/opts.proto";
option go_package = "github.com/yourorg/project/ent/proto/entpb";
message User {
+ option (ent.schema).gen = true; // <-- tell protoc-gen-ent you want to generate a schema from this message
string name = 1;
string email_address = 2;
}
开发者可以调用标准 protoc(protobuf 编译器)命令来使用此插件:
protoc -I=proto/ --ent_out=. --ent_opt=schemadir=./schema proto/entpb/user.proto
以从这些定义生成 Ent 模式:
package schema
import (
"entgo.io/ent"
"entgo.io/ent/schema/field"
)
type User struct {
ent.Schema
}
func (User) Fields() []ent.Field {
return []ent.Field{field.String("name"), field.String("email_address")}
}
func (User) Edges() []ent.Edge {
return nil
}
想要今天开始使用 protoc-gen-ent,并了解所有不同配置选项,请前往文档。
加入 Schema Import Initiative
你是否有定义在其他地方的模式,希望能自动导入到 Ent?使用 schemast 包,编写你所需工具从未如此简单。不知道从何开始?想与社区共同规划和构建你的想法?欢迎通过我们的 Discord 服务器(Discord 服务器)、Slack 频道(Slack 频道)或在 GitHub 讨论(GitHub 讨论)中与我们联系!
- 订阅我们的时事通讯
- 在推特上关注我们
- 加入 #ent 在Gophers Slack
- 加入我们在 Ent Discord 服务器(Ent Discord 服务器)