Java 如何使用需要同时初始化的相关字段构造复杂对象
我正在实现一个API,我不断遇到这个问题,我认为我的核心设计有问题,但我不确定是什么问题,我感觉被设计原则压倒了 基本上,我会有一个对象和一堆相关的字段。使用适当的信息填充字段是非常重要的,并且依赖于使用我传递给构造函数的客户端的一个或多个外部API调用,这些API调用还提供与多个字段相关的信息,因此需要同时填充多个字段。我想保持构造函数的简单/快速,并保持我的对象的可测试性,这样我就不会把任何逻辑放在那里,只需要赋值。然而,我最终要做的是创建一个方法来填充所有字段,并在空检查后在我的所有getter中调用它,即惰性地填充对象字段 我认为这是不好的,因为它违反了“fail fast”原则,特别是因为我使用客户机调用外部服务,如果客户机凭据无效,外部服务可能会失败。但是,我在重新构造代码时遇到了问题 例如,我曾考虑将客户机逻辑提取到服务/连接器中,Java 如何使用需要同时初始化的相关字段构造复杂对象,java,oop,architecture,software-design,Java,Oop,Architecture,Software Design,我正在实现一个API,我不断遇到这个问题,我认为我的核心设计有问题,但我不确定是什么问题,我感觉被设计原则压倒了 基本上,我会有一个对象和一堆相关的字段。使用适当的信息填充字段是非常重要的,并且依赖于使用我传递给构造函数的客户端的一个或多个外部API调用,这些API调用还提供与多个字段相关的信息,因此需要同时填充多个字段。我想保持构造函数的简单/快速,并保持我的对象的可测试性,这样我就不会把任何逻辑放在那里,只需要赋值。然而,我最终要做的是创建一个方法来填充所有字段,并在空检查后在我的所有get
ClothingConnector
,但我不确定这是否能解决我的问题,因为我仍然不想在构造函数中调用它,同时填充多个字段仍然是有益的
class Person {
ClientToGetClothing clothingClient;
Pants pants;
Shirt shirt;
Fabric shirtFabric;
Fabric pantsFabric;
public Person(ClientToGetClothing clothingClient) {
this.clothingClient = clothingClient;
}
private void populateClothing() {
PantsResponse pantsInfo = clothingClient.retrievePantsInfo();
this.pants = pantsInfo.getPants();
ShirtResponse shirtInfo = clothingClient.retrieveShirtInfo();
this.shirt = pantsInfo.getShirt();
// do some more things with my pants + shirt and assign results to more fields, calculate the fabric in this example
}
public Shirt getShirt() {
if (shirt == null) {
populateClothing;
}
return this.shirt;
}
// ...
}
首先,我要将ClothingClient与Person对象解耦。让工厂进行属性填充,然后返回person类。
为什么不事先从外部API获取所需的组件并将其传递给构造函数(&)?与a结合使用,可以生成可读性很好的代码。除此之外,这个问题似乎更适合于制造业。我认为这个操作对于工厂来说太复杂了,因此应该使用建筑商