首页 > 解决方案 > 是否有避免使用编程语言类型的做法的名称?

问题描述

我试图说服同事停止编写这样的代码(java 中的示例):

class Person {
    Long id;
    String name;
    String surname;
}

并编写如下代码:

class Person {
    PersonId id;
    PersonName name;
    PersonSurname surname;
}

基本上,我想避免过度使用 Strings'、Longs' 并使用与域对应的专用类型。这不是一个新的概念、方法或实践(不管你怎么称呼它),所以它可能已经有了一个名字。可能有很多人已经写过这种方法的优缺点,但我找不到任何东西,因为我不知道该寻找什么。

标签: design-patterns

解决方案


是的,这种做法的名称是Avoiding Primitive Obsession

根据这篇文章

The Smell: Primitive Obsession 使用原始数据类型来表示领域思想。例如,我们使用 String 来表示消息,使用 Integer 来表示金额,或者使用 Struct/Dictionary/Hash 来表示特定对象。

修复:通常,我们引入一个 ValueObject 来代替原始数据。

工具:有些语言会让你更容易或更难。

在像 C# 和 Java 这样的语言中,创建数百个小类型只是包装一个简单的字符串或 int 可能会很痛苦。例如,您将有很多这样的类:

class PersonName {
    public String value;
    public PersonName(String value) {
        this.value = value;
    }
}

但是在像 F# 这样的ML 语言中,创建简单的包装器类型是微不足道的:

type PersonName = PersonName of string

关于该主题的一些好文章:


推荐阅读