首页 >后端开发 >Golang >vogen -golang 中的值对象生成器

vogen -golang 中的值对象生成器

DDD
DDD原创
2024-12-29 14:41:11216浏览

vogen - Value Object Generator in golang

介绍

你了解领域驱动设计(DDD)吗?我还是没能完全理解。

最近,我一直在深入研究有关领域驱动设计(DDD)的书籍。在DDD中,出现了值对象的概念。值对象主要具有以下特征(与本文主题无关的元素被故意省略):

  • 不可变
  • 当对象的值相等时,它们被认为是相等的

为了满足 Golang 中的上述规范,实现需要如下所示:

坦白说,实现这种功能很麻烦。此外,为 Getter() 或 Equal() 编写单元测试感觉毫无意义。我经常发现自己希望“如果 Golang 有像 Kotlin 的值类或数据类那样的东西就好了。”

生成值对象代码

nao1215/vogen 包是一个使用 New()、Getter 和 Equal() 方法自动生成值对象代码的库。该名称代表“值对象生成器”。

使用这个库,您可以在 Golang 中编写值对象的元数据,并根据该元数据自动生成代码。该规范的灵感来自 shogo82148/myddlmaker(一个从元数据生成 DB DDL 的库)。

预期用途

典型用法包括在 value_object/gen/main.go 中定义元数据并运行 gogenerate ./... 生成 value_object/value_object.go 文件。还可以将输出分布到多个文件中。

下面是 value_object/gen/main.go 的示例实现。

在 vogen.New() 中,您可以指定生成代码的文件路径和包名称,但这些是可选的。如果省略,vo包下默认会生成一个value_objects.go文件。

vogen.ValueObject() 对应元数据。结构及其字段的注释是可选的。如果省略,输出将包括毫无灵魂的英文注释。对于类型,您可以指定定义类型(用户定义类型),但在这种情况下,您还必须提供模块路径。由于定义类型尚未经过测试,我特意从示例代码中省略了它们(计划稍后进行测试)。

自动生成的代码

下面是使用上面的示例自动生成的代码:

我为什么写这篇文章

我想知道 Golang 用户是否会对像 vogen 包这样的功能感兴趣。

以上是vogen -golang 中的值对象生成器的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn