首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >简单工厂设计模式和注入jpa存储库

简单工厂设计模式和注入jpa存储库
EN

Stack Overflow用户
提问于 2020-08-19 00:19:04
回答 1查看 36关注 0票数 0

我正在尝试在我的一个项目中实现简单的工厂设计模式。我不太确定我应该把与DB交互的逻辑放在哪里。通常我会这样做:

代码语言:javascript
复制
@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创建的:

代码语言:javascript
复制
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关键字创建的,该如何使其工作呢?或者,我是否应该简单地在顶层创建JpaRepositoryInjection,然后将其传递给下一个工厂?

EN

回答 1

Stack Overflow用户

发布于 2020-08-19 01:20:57

如果所有的实现都扩展了相同的父接口,那么你只需要使用映射自动生成并根据类型返回实现即可。例如。

代码语言:javascript
复制
{
.
.
.
    @Autowired 
    Map<String, ScannerIntegrationService> scanners;

    public ScannerIntegrationService getScanner(ScannerPluginType type){
    return map.get(type.ToString());
.
.
.
}

此外,关于存储库的使用,每个服务实现都可以在其各自的实现中通过正常注入使用它所需的不同存储库。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/63472706

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档