我正在尝试在我的一个项目中实现简单的工厂设计模式。我不太确定我应该把与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关键字创建的,该如何使其工作呢?或者,我是否应该简单地在顶层创建JpaRepository的Injection,然后将其传递给下一个工厂?
发布于 2020-08-19 01:20:57
如果所有的实现都扩展了相同的父接口,那么你只需要使用映射自动生成并根据类型返回实现即可。例如。
{
.
.
.
@Autowired
Map<String, ScannerIntegrationService> scanners;
public ScannerIntegrationService getScanner(ScannerPluginType type){
return map.get(type.ToString());
.
.
.
}此外,关于存储库的使用,每个服务实现都可以在其各自的实现中通过正常注入使用它所需的不同存储库。
https://stackoverflow.com/questions/63472706
复制相似问题