SpringMVC:软件架构的最佳选择
我使用SpringMVC开发RESTWeb服务 我知道应用程序应该包含3层: 持久层:用@Repository注释的类 服务层:用@service注释的类 控制器层:用@controller注释的类 在我的例子中,数据首先从restful ws(后端)加载,然后存储到数据库中,经过一段时间后,我的项目从rest ws(后端)重新加载数据以刷新数据并使用它提供一些服务 那么调用后端ws的java类应该用@Service注释? 然后直接从控制器调用? 在这种情况下,如何安排项目架构? 它的体系结构是否与使用数据库数据的体系结构相同SpringMVC:软件架构的最佳选择,spring,spring-mvc,spring-ws,software-design,Spring,Spring Mvc,Spring Ws,Software Design,我使用SpringMVC开发RESTWeb服务 我知道应用程序应该包含3层: 持久层:用@Repository注释的类 服务层:用@service注释的类 控制器层:用@controller注释的类 在我的例子中,数据首先从restful ws(后端)加载,然后存储到数据库中,经过一段时间后,我的项目从rest ws(后端)重新加载数据以刷新数据并使用它提供一些服务 那么调用后端ws的java类应该用@Service注释? 然后直接从控制器调用? 在这种情况下,如何安排项目架构? 它的体系结构是
谢谢据我所知,您的数据库是Web服务数据的某种缓存,对吗 因此,我将实现一些@servicebean,它们负责从WS检索数据,我们称之为“WSAccessBean” 现在我想到了两种方法:
@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();
}
}
@服务
公共类BookWebservice{
//从远程Web服务加载书籍
列出检索书籍();
}
@存储库
公共类藏书刀{
列出getBooks();
作废库房(清单册);
布尔更新();
}
@服务
公共类图书服务{
@自动连线
书刀书刀;
@自动连线
BookWebservice BookWebservice;
//检查本地数据是否是最新的。如果不是通过Webservice加载并存储在本地数据库中,则从数据库返回内容
列出getBooks(){
如果(!bookDAO.uptodate()){
bookDAO.storeBooks(bookWebservice.retrieveBooks());
}
返回bookDAO.getBooks();
}
}
@控制器
公共类图书管理员{
@自动连线
图书服务;
@GetMapping(“/books”)
公共图书目录(){
return bookService.getBooks();
}
}
关于固定期限和到期日等问题,您的问题不是很清楚。您是说您的rest服务正在调用另一个rest服务,所以您对体系结构感到困惑?谢谢andreas。没有定期电话。数据被缓存到数据库中,当调用者发送请求时,我的应用程序会在数据库中查找数据,如果数据过期,它会从WS。因此,第二个建议“延迟加载”对于我的应用程序来说更合适