Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/design-patterns/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Design patterns 避免使用编程语言类型的做法有没有名字?_Design Patterns - Fatal编程技术网

Design patterns 避免使用编程语言类型的做法有没有名字?

Design patterns 避免使用编程语言类型的做法有没有名字?,design-patterns,Design Patterns,我试图说服同事停止编写这样的代码(java示例): 并编写如下代码: class Person { PersonId id; PersonName name; PersonSurname surname; } class PersonName { public String value; public PersonName(String value) { this.value = value; } } 基本上,我希望避免过度使用

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

并编写如下代码:

class Person {
    PersonId id;
    PersonName name;
    PersonSurname surname;
}
class PersonName {
    public String value;
    public PersonName(String value) {
        this.value = value;
    }
}

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

是的,这种做法的名称是
避免原始困扰

据此:

气味:原始困扰是使用原始数据类型来表示领域想法。例如,我们使用字符串表示消息,使用整数表示金额,或使用Struct/Dictionary/Hash表示特定对象

修复方法:通常,我们引入ValueObject来代替原始数据

工具:有些语言让你更容易或更难做到这一点

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

class Person {
    PersonId id;
    PersonName name;
    PersonSurname surname;
}
class PersonName {
    public String value;
    public PersonName(String value) {
        this.value = value;
    }
}
但在类似F#的情况下,创建简单的包装器类型非常简单:

type PersonName = PersonName of string
关于这个主题的一些好文章:


是的,这种做法的名称是
避免原始的困扰

据此:

气味:原始困扰是使用原始数据类型来表示领域想法。例如,我们使用字符串表示消息,使用整数表示金额,或使用Struct/Dictionary/Hash表示特定对象

修复方法:通常,我们引入ValueObject来代替原始数据

工具:有些语言让你更容易或更难做到这一点

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

class Person {
    PersonId id;
    PersonName name;
    PersonSurname surname;
}
class PersonName {
    public String value;
    public PersonName(String value) {
        this.value = value;
    }
}
但在类似F#的情况下,创建简单的包装器类型非常简单:

type PersonName = PersonName of string
关于这个主题的一些好文章:


它通常被称为。我个人认为第一个例子很好。只要传递的是
Person
对象,而不是它的单个字段,我就不会称之为string-typed编程。它通常被称为string-typed编程。我个人认为第一个示例很好。只要传递的是
Person
对象,而不是它的单个字段,我就不会调用这种严格类型的编程。