我试图说服同事停止编写这样的代码(java中的示例):
class Person {
Long id;
String name;
String surname;
}
并编写如下代码:
class Person {
PersonId id;
PersonName name;
PersonSurname surname;
}
基本上,我想避免过度使用Strings,Longs并使用与域相对应的专用类型。这不是一个新的概念,方法论或实践(无论如何称呼),因此它可能已经有了名称。可能有很多人已经写过这种方法的利弊,但是我找不到任何人,因为我不知道要寻找什么。
答案 0 :(得分:4)
是的,这种做法的名称是Avoiding Primitive Obsession
。
根据此article:
“气味:原始痴迷”使用原始数据类型表示领域思想。例如,我们使用String表示消息,使用Integer表示金额,或者使用Struct / Dictionary / Hash表示特定对象。
解决方法:通常,我们引入ValueObject代替原始数据。
工具:某些语言使您更轻松或更难。
在C#和Java之类的语言中,仅包装一个简单的字符串或整数就创建数百个微小类型可能会很痛苦。例如,您将有很多这样的类:
class PersonName {
public String value;
public PersonName(String value) {
this.value = value;
}
}
但是在ML languages中,像F#一样,创建简单的包装器类型很简单:
type PersonName = PersonName of string
有关该主题的一些好文章: