首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Spring mvc:软件架构的最佳方案

Spring mvc:软件架构的最佳方案
EN

Stack Overflow用户
提问于 2017-06-08 21:45:06
回答 1查看 425关注 0票数 0

我使用spring mvc开发rest Web服务。

我知道应用程序应该包含3层:

持久层:用@Repository注解的类

服务层:用@Service注解的类

控制器层:使用@Controller注解的类

对于我的例子,数据首先从restful ws (后端)加载,然后存储到数据库中,一段时间后,我的项目从rest ws (后端)重新加载数据,以刷新数据并使用它来提供一些服务。

那么调用后端ws的java类应该用@Service注解吗?然后直接从控制器调用?在这种情况下,如何安排项目架构?它与那些使用数据库数据的架构是相同的吗?

谢谢

EN

回答 1

Stack Overflow用户

发布于 2017-06-08 23:40:02

据我所知,您的数据库是某种the服务数据的缓存,对吧?

因此,我将实现一些负责从WS检索数据的@Service bean,让我们称其为"WSAccessBean“。

现在我想到了两种方法:

  1. 急切加载: Spring servlet将使用scheduled-tasks定期调用WSAccessBean并将检索到的数据存储在数据库中。您的控制器bean将像往常一样使用@Repository bean来访问此数据。

服务延迟加载:您实现了另一个@

  1. bean,它是数据访问的外观,让我们称之为"DataAccessBean“。这两个bean都将使用:@Repository bean来检查最新数据是否在我们的本地数据库中,如果不是,它将使用WSAccessBean首先检索数据,然后将其从数据库返回给调用者。

注释后编辑:

因此,如果您的数据需要按需加载,下面的代码片段将以"Book“POJO为例显示基本架构:

代码语言:javascript
复制
@Service
public class BookWebservice {
    // Load books from remote webservice
    List<Book> retrieveBooks();
}

@Repository
public class BookDAO {
    List<Book> getBooks();
    void storeBooks(List<Book> books);
    boolean uptodate();
}

@Service
public class BookService {

    @Autowired
    BookDAO bookDAO;

    @Autowired
    BookWebservice bookWebservice;

    // Checks if local data is up-to-date. If not load via Webservice and store in the local DB, then return content from DB
    List<Book> getBooks() {

        if (!bookDAO.uptodate()) {
            bookDAO.storeBooks(bookWebservice.retrieveBooks());
        }
        return bookDAO.getBooks();
    }
}

@Controller
public class BookController {

    @Autowired
    BookService bookService;

    @GetMapping("/books")
    public List<Book> books() {
        return bookService.getBooks();
    }
}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/44437457

复制
相关文章

相似问题

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