java - 如何重构此 Java 代码使其更干燥?
问题描述
在脚本/动态语言中,这似乎很简单……但是在 Java 中似乎并非如此,或者我只是遗漏了一些东西。
这是我目前的代码:
switch (selectedModel) {
case "author":
switch (selectedAction) {
case "create":
AuthorController.create();
break;
case "read":
AuthorController.read(promptForID());
break;
case "update":
AuthorController.update(promptForID());
break;
case "destroy":
// AuthorController.destroy(promptForID());
break;
}
break;
case "book":
// now I have to repeat all the same code...
对于“书”的情况,我将不得不再次重复所有相同的代码。我会认为有更好的方法。
解决方案
使用静态方法时不能这样做。创建接口:
public interface CrudController {
void create();
void read(String id);
void update(String id);
void destroy(String id);
}
现在让所有控制器实现该接口,然后您的代码变为:
CrudController controller;
switch (selectedModel) {
case "author":
controller = new AuthorController();
break;
case "book":
controller = new BookController();
break;
...
default:
throw new IllegalArgumentException("Unknown model: " + selectedModel);
}
switch (selectedAction) {
case "create":
controller.create();
break;
case "read":
controller.read(promptForID());
break;
case "update":
controller.update(promptForID());
break;
case "destroy":
// controller.destroy(promptForID());
break;
default:
throw new IllegalArgumentException("Unknown action: " + selectedAction);
}
推荐阅读
- node.js - 没有get请求时如何处理csrf仅发布请求
- algorithm - 不相交的边界框
- java - Spring Batch:Kafka 民意调查需要很长时间才能检索消息?
- django - 为什么 Django FileInput 小部件从不呈现值?是否存在安全风险?
- google-cloud-platform - 如何重置 OAuth 同意屏幕?
- java - 从对话框开始新的活动
- docker - 连接期间出错:获取“http://direct.labs.play-with-docker.com:2375/v1.24/containers/json”:EOF
- excel - Excel 每 60 行
- android - Android Studio - 按钮 onClick() 不起作用
- amazon-web-services - 使用 Gremlin 和 Amazon Neptune 进行顶点模式分析和匹配