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

在我的 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 方法中,但不确定依赖项范围的经验法则是什么。


人到中年有点甜
浏览 76回答 3
3回答

慕哥9229398

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

大话西游666

我假设您的 IFarm 实现是模型类。在模型中拥有存储库不是一个好习惯。您应该考虑将不同 IFarm 实现的创建移动到 FarmRepo。如果 IFarm 实现是某种管理业务逻辑的服务类,那么您应该让 spring 处理它,向它们注入 FarmRepo 实例。在那种情况下,您最好考虑使用抽象类而不是使用 IFarm,因为 FarmRepo 是它们之间的共同依赖项。使用简单的工厂方法来实例化所需的运行时类型没有错,如果需要的话,它需要在某个地方完成,它可以帮助您根据 OCP(开闭原则)获得有效的设计,防止您根据需要更改行为在类型参数上,而是使用多态性。

一只斗牛犬

我建议为您的实际实现(AppleFarm、AnimalFarm ..)创建命名 bean 并注入 FarmRepo。有了你的工厂,你真正的实现将不会由 Spring 管理(没有 beans)。@Component("appleFarm")@RequiredArgsConstructor <- this is a Lombok feature check it outpublic class AppleFarm implements Farm {private final FarmRepo repo;...}
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java