首页 > 解决方案 > 如何重构此 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...

对于“书”的情况,我将不得不再次重复所有相同的代码。我会认为有更好的方法。

标签: java

解决方案


使用静态方法时不能这样做。创建接口:

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

推荐阅读