为了账号安全,请及时绑定邮箱和手机立即绑定

具有相同依赖性的多个嵌套类还是具有更大范围的嵌套类更好?

具有相同依赖性的多个嵌套类还是具有更大范围的嵌套类更好?

人到中年有点甜 2023-03-09 14:03:31
在我的 Spring Boot 应用程序中,我正在创建一个工厂,用于创建具有相同接口和依赖项的不同对象,如下所示。@Componentpublic class FarmFactory {    @Autowired    private FarmRepo farmRepo;    public IFarm create(FarmType type) {        if (type == type.APPLE) {            return new AppleFarm(farmRepo);        } else if (type == type.ANIMAL) {            return new AnimalFarm(farmRepo);        } else {            return new EmptyFarm(farmRepo);        }    }}我想知道通过将 FarmRepo 依赖项注入每个农场子类(苹果、动物、空)来限制 FarmRepo 依赖项的范围是否更好。或者,如果将单个依赖项保留在工厂的更高范围内会更好。或者,可以将依赖项 FarmRepo 与类型一起传递到 create 方法中,但不确定依赖项范围的经验法则是什么。
查看完整描述

3 回答

?
慕哥9229398

TA贡献1877条经验 获得超6个赞

根据我的经验,一个好的设计可以if-else尽可能的减少。所以我更喜欢将它注入到你的每个子类中。因此,将来,如果依赖项也有子类,您将拥有更大的灵活性。



查看完整回答
反对 回复 2023-03-09
?
大话西游666

TA贡献1817条经验 获得超14个赞

我假设您的 IFarm 实现是模型类。在模型中拥有存储库不是一个好习惯。您应该考虑将不同 IFarm 实现的创建移动到 FarmRepo。

如果 IFarm 实现是某种管理业务逻辑的服务类,那么您应该让 spring 处理它,向它们注入 FarmRepo 实例。在那种情况下,您最好考虑使用抽象类而不是使用 IFarm,因为 FarmRepo 是它们之间的共同依赖项。

使用简单的工厂方法来实例化所需的运行时类型没有错,如果需要的话,它需要在某个地方完成,它可以帮助您根据 OCP(开闭原则)获得有效的设计,防止您根据需要更改行为在类型参数上,而是使用多态性。


查看完整回答
反对 回复 2023-03-09
?
一只斗牛犬

TA贡献1784条经验 获得超2个赞

我建议为您的实际实现(AppleFarm、AnimalFarm ..)创建命名 bean 并注入 FarmRepo。有了你的工厂,你真正的实现将不会由 Spring 管理(没有 beans)。


@Component("appleFarm")

@RequiredArgsConstructor <- this is a Lombok feature check it out

public class AppleFarm implements Farm {


private final FarmRepo repo;

...

}


查看完整回答
反对 回复 2023-03-09
  • 3 回答
  • 0 关注
  • 75 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信