我正在尝试在我的一个项目中实施简单的工厂设计模式。我不太确定应该将与DB
进行交互的逻辑放在哪里。通常我会这样做:
@Component
public class Foo {
private final BooRepository booRepository;
public Foo(BooRepository booRepository){
this.booRepository = booRepository;
}
void test(){
List<Boo> booList = booRepository.findAll();
}
}
但是将这样的逻辑放入ConcreteProduct
并不是尝试实现简单工厂设计的选择,因为在我的情况下ConcreteProduct
是由new
创建的。
public static ScannerIntegrationFactory getProperScanner(ScannerPluginType type) {
ScannerIntegrationFactory scanner = null;
switch (type) {
case DEPENDENCYTRACK:
scanner = new DependencyTrack();
break;
case SPOTBUG:
scanner = new Spotbug();
break;
}
return scanner;
}
谁能给我一个提示,以这种方式与数据库交互的最佳方法是什么?是应该以某种方式在ConcreteProduct
级别完成还是应该ConcreteProduct
仅返回特定的对象,这些对象以后应保存到DB?但是,如果使用ConcreteProduct
关键字创建了new
,如何使其工作呢?
还是我应该在顶层Injection
中创建JpaRepository
,然后将其传递给每个下一个工厂?
答案 0 :(得分:0)
如果所有实现都扩展相同的父接口,则可以只使用Map Autowiring并根据类型返回实现。例如。
{
.
.
.
@Autowired
Map<String, ScannerIntegrationService> scanners;
public ScannerIntegrationService getScanner(ScannerPluginType type){
return map.get(type.ToString());
.
.
.
}
此外,关于存储库的使用,每个服务实现都可以通过在各自的实现中进行正常注入来使用所需的不同存储库。