java - 拥有多个具有相同依赖项的嵌套类还是具有更大范围的嵌套类更好?
问题描述
在我的 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 方法,但不确定依赖范围的经验法则是什么。
解决方案
我假设您的 IFarm 实现是模型类。在模型中拥有存储库不是一个好习惯。您应该考虑将不同 IFarm 实现的创建移至 FarmRepo。
如果 IFarm 实现是某种管理业务逻辑的服务类,那么您应该让 spring 处理它,将 FarmRepo 实例注入它们。在这种情况下,您最好考虑使用抽象类而不是使用 IFarm,因为 FarmRepo 是它们之间的常见依赖项。
使用简单的工厂方法来实例化所需的运行时类型并没有错,如果需要,则需要在某个地方完成,它可以帮助您根据 OCP(开闭原则)获得有效的设计,从而防止您根据情况改变行为在类型参数上,而不是您使用多态性。
推荐阅读
- css - 标题上方的顺风文本
- c# - sqlite executeNonQuery 与 executeNonQueryAsync
- django - 无法启动安装在 docker 内的 django
- python - POST 语句 Python 请求
- xamarin - 我可以在模板中使用带有 TemplateSelector 和 ValueConverter 的 Xamarin Forms ListView 吗?
- c# - 如何将多个剃刀文本框值连接到单个属性值
- php - 将 S3 预签名 URL 与 VichUploader 一起使用
- java - 如何使用Socket将消息从Android发送到Windows中的python应用程序
- java - 在 java 项目中仅使用一小部分功能时,我可以减小 openCV 库的大小吗?
- c# - 基于角色的授权身份 API - 注册不起作用