[英]Is this a valid MVP Pattern Implementation
我正在嘗試分析一些使用MVP方法設計的代碼。 沒有使用特定的MVP框架。 這都是手寫代碼。
//Interface Representing our View
public interface IFooView
{
string SomeScreenValue
}
//Presenter Implementation
public class FooPresenter
{
private readonly IFooView _view;
public FooPresenter (IFooView view)
{
//The presenter gets instantiated with a reference to a view.
_view = view
}
public void SomeButton_Click(object sender, EventArgs e)
{
_view.SomeScreenValue = "The Result";
}
}
//The Page Implementation
public class FooPage : System.Web.UI.Page, IFooView
{
private FooPresenter _presenter;
protected void Page_Init(...)
{
_presenter = new FooPresenter(this);
//<-- The View has a Presenter, which references the same View...
Button1.Click += new EventHandler(_presener.SomeButton_Click);
}
}
它的工作原理是,允許開發人員將業務邏輯從代碼移到類中,同時仍然影響View。 但是,缺少實際模型以及設置View => Presenter => View關系的方式對我來說有點討厭嗎?
那么以上情況是MVP模式的有效實現嗎?
這幾乎是MVP,因為您的Presenter與視圖分離的方式是,它在更新UI狀態時會通過IFooView
界面進行更新。 但是,在演示者中使用符合標准.NET事件處理程序的方法對我來說似乎是錯誤的。 我將使IFooView
在發生按鈕單擊時引發一個事件,然后您的頁面可以像當前一樣執行處理按鈕單擊的任務,然后引發Presenter處理的事件。 這個事件可以更密切相關的領域,比如你可能要等事件RecordUpdated
通過你暴露IFooView
。
這將使為單元測試提供IFooView
的模擬實現更加容易, IFooView
這是使用MVP / MVC / MVVM模式的一大優勢。
如果您沒有來自后端服務或數據庫的任何數據,那么在簡單應用程序的情況下,Presenter也可以擔當模型的角色。 在您的瑣碎示例中就是這種情況。 在MVVM中可以執行相同的操作,其中ViewModel也可以承擔Model職責。 但是,如果您做任何不重要的事情,我建議您創建一個模型。 在您的情況下,演示者將委托模型維護狀態,並使用某種“服務”將對模型的更改持久化,或從Web服務中檢索模型對象。
是的。
但是...我應該將presenter結構更改為FooPage構造函數。 有時您想處理preInit事件,而這種設置是不可能的。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.