3 回答

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

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

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;
...
}
添加回答
举报