我有一个刮板,它可以扫描网页中的特定信息并从中创建一个对象。其中一个属性是id,稍后用于查询新对象的剩余属性。
因为构建这个对象的责任被分成几个类(scraper 类和使用其中一个属性进行查询的类),我想避免使用传递一个Builder(此外,带有访问器的 Builder 模式似乎很奇怪我)。
同时,我想避免正在构建的对象中出现空引用。
Guava 的 Optional似乎也不太合适,因为在其构造的所有步骤完成后,对象的属性肯定不会为空。
我可以创建单独的类,如下所示:
class ScrapeablePersonImportPart {
String surname;
Year yearOfBirth;
String externalId;
// ... getters, constructor ...
}
class PersonImport extends ScrapeablePersonImportPart {
SocialSecurityNumber ssn;
Color favoriteColor;
// ... getters, constructor ...
PersonImport( ScrapeablePersonImportPart part, SocialSecurityNumber ssn, Color favoriteColor ) {
this.surname = part.getSurname();
this.yearOfBirth = part.getYearOfBirth();
this.externalId = part.getExternalId();
this.ssn = ssn;
this.favoriteColor = favoriteColor;
}
}
或者我可以避免子类化并改用组合。
随着程序的发展,构造很可能包括更多的步骤。
具有几个单独类的解决方案看起来合理吗?