1

作为我目前正在进行的培训计划的一部分,我的任务是开发一个简单的基于命令行的帮助台应用程序。该项目的重点是培养我们使用设计模式、SOLID 原则、MVC 架构等的能力。

我在理解如何保持 MVC 结构的灵活性方面遇到问题。这是我的代码的一部分的示例...

public class RegisterController 
{   
    View view;
    RegisterModel registerModel;

    public RegisterController()
    {
        registerModel = new RegisterModel();
    }

    public void processRegistration(String username, String password, Role role)
    {
        if(registerModel.isRegisterable(username, password))
        {
            User newUser = new User(username, password, role);
            registerModel.registerUser(newUser);
            view = new LoginView(new LoginController());
        }
        else
        {
            System.out.println("ERROR during registration.");
            view = new MainView(new MainController());
        }

        view.startView();
    }
}

理想情况下,我希望能够在以后进入并用不同的用户界面(视图类)替换它,例如网页,而无需更改我的模型或控制器。但是,目前您可以看到我正在编写命令行“MainView”和“LoginView”类的具体实现。

我怎样才能使这个控制器代码更灵活,并允许用不同的用户界面替换代码修改最少?当更改为不同的 UI 时,期望控制器代码保持不变是不现实的吗?

4

1 回答 1

1

MVC/MVP 设计模式的主要好处之一是它们允许您对演示者进行单元测试,同时模拟视图和模型。

因此,我总是建议使用作为参数传递给构造函数的视图和模型来构造控制器/演示器。如果视图和模型作为接口类型传递,那么它们可以在测试场景中用模拟对象替换。在您当前的设计中,在控制器中选择了具体的实现,这打破了这种范式。

我通常将我的控制器和视图链接到一个中心位置。然而,这假设控制器不会在构建时立即启动昂贵的计算操作。我不确定是否有完美的答案,但我相信您应该调整当前的设计以进行测试。

于 2012-09-02T12:22:55.467 回答