저는 Dart에서 몇 가지 코드를 작성했습니다. 나는 공장 제작자를 정말 좋아하지만, 나는 그것이 유용하다는 점을 두려워하고있다. 특히 값 객체 클래스를 작성할 때 유효성 검사가 실패하면 null을 반환하는 경우가 있습니다. 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 이외의 값으로 초기화 기대한다는 것입니다. 이것이 이것이 완벽하게 수용되는 이유는 생성자가 팩토리이며, 따라서 null
값을 반환 할 수 있다는 것입니다.
이렇게 나쁜 습관이나 유용한 기능을 활용하고 있습니까?
'return _regex.hasMatch (input)? 새로운 EmailAddress._internal (입력) : throw "something went wrong"; 또한 잘못 전달 된 인수로 올바른 결과를 예상하는 경우 emailAddress가 항상 null이 아닌 값으로 초기화됩니다. – mezoni
전자 메일 주소의 유효성 검사는 생성자에서 수행하지 말고 사용자가 요청할 때 수행하십시오. 가능한 한 빨리 확인하고 가능한 빨리 사용자에게 알려야합니다 (예 :이 경우 '보내기'버튼을 사용 중지하는 것이 좋습니다). – GameAlchemist