首页 > 解决方案 > 拥有多个具有相同依赖项的嵌套类还是具有更大范围的嵌套类更好?

问题描述

在我的 Spring Boot 应用程序中,我正在创建一个工厂,用于创建具有相同接口和依赖项的不同对象,如下所示。

@Component
public 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 方法,但不确定依赖范围的经验法则是什么。

标签: javaspring-bootdependency-injection

解决方案


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

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

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


推荐阅读