【问题标题】:Spring mvc: Best paractices for software architectureSpring mvc:软件架构的最佳实践
【发布时间】:2017-06-08 13:45:06
【问题描述】:

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

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

持久层:使用@Repository 注解的类

服务层:用@Service注解的类

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

就我而言,数据首先从 restful ws(后端)加载,然后存储到数据库中,经过一段时间后,我的项目从其余 ws(后端)重新加载它以刷新数据并使用它来提供一些服务。

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

谢谢

【问题讨论】:

  • 您的问题关于固定期限和到期等不是很清楚。您是说您的休息服务正在调用另一个休息服务,因此您对架构感到困惑?

标签: spring spring-mvc spring-ws software-design


【解决方案1】:

据我了解,您的数据库是 Web 服务数据的某种缓存,对吗?

所以我会实现一些负责从 WS 检索数据的 @Service bean,我们称之为“WSAccessBean”。

现在我想到了两种方法:

  1. 急切加载:您的 Spring servlet 将使用计划任务定期调用 WSAccessBean 并将检索到的数据存储在数据库中。您的控制器 bean 将像往常一样使用 @Repository bean 来访问这些数据。
  2. 延迟加载:您实现了另一个@Service bean,它是数据访问的外观,我们称之为“DataAccessBean”。这个将同时使用:@Repository bean 来检查我们的本地数据库中是否有最新数据,如果没有,它将使用 WSAccessBean 首先检索数据,然后将其从数据库返回给调用者。

评论后编辑:

因此,如果您的数据需要按需加载,则以下 sn-p 将使用“Book” POJO 作为示例显示基本架构:

@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();
    }
}

【讨论】:

  • 谢谢安德烈亚斯。没有定期调用。数据被缓存到数据库中,当调用者发送请求时,我的应用程序会在数据库中查找数据,如果它过期,它会从 WS 中检索它。所以第二个建议“延迟加载”更适合我的应用程序
猜你喜欢
  • 1970-01-01
  • 2013-04-29
  • 2015-09-11
  • 2014-06-26
  • 2015-04-19
  • 2011-05-18
  • 2012-04-13
  • 2013-01-04
  • 1970-01-01
相关资源
最近更新 更多