MVP设计模式最佳实践

5
考虑以下伪代码,它实现了MVP模式:
interface Presenter {
    void onSendClicked();
}

interface View {
    String getInput();
    void showProgress();
    void hideProgress();
}

class PresenterImpl implements Presenter {
    // ...ignore other implementations
    void onSendClicked() {
        String input = view.getInput();
        view.showProgress();
        repository.store(input);
        view.hideProgress();
    }
}

class ViewImpl implements View {
    // ...ignore other implementations
    void onButtonClicked() {
        presenter.onSendClicked();
    }

    String getInput() {
        return textBox.getInput();
    }

    void showProgress() {
        progressBar.show();
    }

    void hideProgress() {
        progressBar.hide();
    }
}

这里是MVP模式的另一种实现方式:

interface Presenter {
    void saveInput(String input);
}

interface View {
    void showProgress();
    void hideProgress();
}

class PresenterImpl implements Presenter {
    // ...ignore other implementations
    void saveInput(String input) {
        view.showProgress();
        repository.store(input);
        view.hideProgress();
    }
}

class ViewImpl implements View {
    // ...ignore other implementations
    void onButtonClicked() {
        String input = textBox.getInput();
        presenter.saveInput(intput);
    }

    void showProgress() {
        progressBar.show();
    }

    void hideProgress() {
        progressBar.hide();
    }
}

哪一种MVP模式的实现更正确?为什么?

代码审查可能是这个问题更好的地方,你可以在这里得到一些很好的答案:http://codereview.stackexchange.com/ - ZeroBased_IX
@Jezzabeanz 他需要真正的代码,而不是伪代码。 - user5458362
我怎样在不直接询问意见的情况下请求意见? - CarlLee
1个回答

2

我的简短回答:

我会选择第一个。

我的详细回答:

基本上,MVP有两个变种:被动视图监控型Presenter

你的伪类创建了被动视图的实现。

要了解区别,请查看这里的第一个答案。它完美地描述了它们以及它们之间的区别,因此我认为没有必要在这里复制内容。

我的回答原因:

被动视图的主要思想是让视图尽可能愚蠢。它只需在某些用户操作发生时通知其Presenter,并公开访问器和修改器以从GUI获取和设置值。所有这些都是为了在视图级别实现最大的可测试性。

基于此,视图不应该知道当按钮被按下时它应该提供来自您输入文本框的值。它只需通知Presenter按钮已被按下,并公开getter以供Presenter收集任何所需的用户输入。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接