在Model View Presenter模式中,演示者是否可以同时使用和使用两个不同的视图界面?

时间:2009-02-04 15:46:48

标签: c# design-patterns model-view-controller mvp

我很好奇你有一个用户控件要在整个应用程序中重用的情况,但你也有一个页面或其他控件也需要一个演示者。

所以说我有一个上传视图和控件

public partial class UploadControlView : System.Web.UI.UserControl, IUploadView

但我也有一个页面视图

public partial class ExcelProcessorView : System.Web.UI.Page, IExcelProcessorView

上传控件将位于ExcelProcessor页面上,这样用户就可以上传一个文件,该文件将传递给某些Excel处理业务逻辑。

所以我有一位主持人,

public class ExcelUploadAndProcessPresenter : IUploadPresenter

在ExcelProcessorView中,我会按如下方式连接演示者:

protected void Page_Load(object sender, EventArgs e) 
    {
        ExcelUploadAndProcessorPresenter presenter = 
            new ExcelUploadAndProcessorPresenter(this, uploadControl);
        this.AttachPresenter(presenter);
        uploadControl.AttachPresenter(presenter);
        //init etc...
    }

这是否正确使用MVP模式?

我正在试图找出处理一个主持人关系的许多视图的最佳做法。 MVP能否以这种方式拥有多对一的关系。作为一个替代问题,我还想知道MVP模式是否可以/应该处理你有许多演示者和许多观点的情况(或者你应该只有一个演示者)?

如果您发现我对MVP的解释存在任何问题,请务必继续指出。

感谢阅读!

1 个答案:

答案 0 :(得分:2)

您能否进一步解释您的视图和控件如何使用相同的逻辑?我无法想象我会遇到这个问题的情况。如果逻辑是分开的,我认为你会使用两个演示者。

但是,没有理由一个演示者无法处理多个视图/控件,尽管我只会为显示相同模型的多个视图重用一个演示者(例如CRUD屏幕)。如果一个视图在同一个演示者中托管另一个视图,我无法想到不应重用您的演示者的原因(例如,在列表屏幕底部创建屏幕)。