我正在用java创建简单的控制台应用程序。现在我用一个主要方法和几个助手来实现menuservice:
public void mainMenu() {
while (true) {
try {
System.out.println("\n___ CINEMA MENU ___");
System.out.println("Find all cinemas - 1");
int decision = UserDataService.getInteger("___ Type option ___");
switch (decision) {
case 0 -> {
System.out.println("Goodbye!");
return;
}
case 1 -> option1();
default -> System.out.println("No option with this number");
}
} catch (Exception e) {
e.printStackTrace();
throw new MenuServiceException("Failed");
}
}
}
private void option1(){
//do some work
}
从该菜单用户将能够执行各种操作。假设当用户输入1时,我想向用户显示数据库中的所有电影院。我有两种方法:
只需在menuservice my cinemarepository中实现,并在option1方法中编写 cinemaRepository.findAll()
在menuservice中实现cinemaservice,并在此cinemaservice中创建一个方法,从db中查找所有我的电影院
@RequiredArgsConstructor
public class CinemaService {
private final CinemaRepository cinemaRepository;
public List<Cinema> findAll() {
return cinemaRepository.findAll();
}
}
然后简单地在option1方法中执行: cinemaService.findAll();
正确的方法是什么?直接从mymenuservice的存储库中执行方法,或者实现cinemaservice并从存储库中隐藏方法。
谢谢你的帮助!我想学习好的编程实践
1条答案
按热度按时间svmlkihl1#
可以直接在option1()内执行cinemarepository.findall()方法。但是,直接公开数据层并不是一个好主意。添加cinemaservice将有助于:
以数据访问层可能无法实现的方式在服务层上添加了应用程序级安全性。
您可以在服务类中添加一些验证。
您可以使用中间层,防止对db进行不必要的调用,从而使对db的调用次数最少。
当您增强应用程序并在db命中之前/之后添加一些逻辑时,它将非常有用。
对于您的情况,您可以尝试这两种方法,正如您所解释的,但更聪明的方法是使用cinemaservice