我一直在用DART写一些代码.我真的很喜欢工厂的建造者,但我担心我滥用了它的用处.具体地说,当我编写一个值对象类时,如果验证失败,我有时会返回NULL.
class EmailAddress {
static final RegExp _regex = new RegExp(...);
final String _value;
factory EmailAddress(String input) {
return _regex.hasMatch(input) ? new EmailAddress._internal(input) : null;
}
const EmailAddress._internal(this._value);
toString() => _value;
}
乍一看,这似乎并没有那么糟糕.然而,当您实际使用它时,这是您所看到的.
methodThatCreatesAnEmailAddress() {
var emailAddress = new EmailAddress("definitely not an email address");
...
}
为什么这是坏的是,来自另一种静态类型语言的开发人员,如java或C++,会期望emailAddress
总是被初始化为非空值.这完全可以接受的理由是构造函数是工厂,因此允许返回null
值.
那么,这到底是一种糟糕的做法,还是在利用一项有用的功能呢?