gpt4 book ai didi

java - 最佳实践是在父类中使用 protected 对象,还是使用 protected /公共(public) getter 将其私有(private)化?

转载 作者:太空宇宙 更新时间:2023-11-04 10:50:03 25 4
gpt4 key购买 nike

使用一个小示例,其层次结构为:

  • 基础模型
  • OrderModel 扩展了 BaseModel

在 BaseModel 内部,我想在任何扩展它的类中拥有一个对象 Faker,这里正确方法是什么?

private Faker faker = new Faker();

protected Faker getFaker() {
return this.faker;
}
<小时/>
protected Faker faker = new Faker();
<小时/>

我选择了这个:

public class Order extends BaseModel {
private static final Logger LOG = LogManager.getLogger(Order.class);

private String orderName;
private String orderAddress;
private String orderEmail;
private String orderPaymentType;

public Order(String order_paymentType) {
this.orderName = getFaker().name().fullName();
this.orderAddress = getFaker().address().streetAddress();
this.orderEmail = getFaker().internet().emailAddress();
this.orderPaymentType = order_paymentType;
LOG.info("Instantiating order: " + this.toString());
}

public String getOrderName() {
return this.orderName;
}

public String getOrderAddress() {
return this.orderAddress;
}

public String getOrderEmail() {
return this.orderEmail;
}

public String getOrderPaymentType() {
return this.orderPaymentType;
}

@Override
public String toString() {
return "Order [orderName=" + orderName + ", orderAddress="
+ orderAddress + ", orderEmail=" + orderEmail
+ ", orderPaymentType=" + orderPaymentType + "]";
}

}

我选择了这个,说实话,我不完全知道为什么,处理这种情况的正确方法是什么,更重要的是为什么?

Faker 是一个基本上用于生成虚假信息的对象。

最佳答案

您设计中的限制是 Faker 将始终出现在所有模型中,这是您应该避免的硬依赖。到目前为止,当前的 Java 最佳实践是支持组合而不是继承。

所以我们可以有一个名为 DataProvider 的接口(interface)

interface DataProvider {
String address();
....
}

Fake 会实现这个地址

类 FakeDataProvider 实现 DataProvider...\现在您可以注入(inject) DataProvider

public Order(String order_paymentType, DataProvider dataProvider){
this.orderName = dataProvider.name().fullName();
....
}

现在您可以将 Faker 替换为其他内容,而无需触及订单代码。所以我的答案是:不要一起使用继承。

关于java - 最佳实践是在父类中使用 protected 对象,还是使用 protected /公共(public) getter 将其私有(private)化?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47960994/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com