![](/img/trans.png)
[英]In MVP can the presenter access a user control directly instead via interface?
[英]Why using interface for Presenter in MVP?
我將使用Professional ASP.NET Design Patterns學習MVP 模式 。 在表示層章節中,它學習如何將MVP應用於asp.net。 演示者的代碼是:
public class HomePagePresenter : IHomePagePresenter
{
private IHomeView _view;
private ProductService _productService;
public HomePagePresenter(IHomeView view, ProductService productService)
{
_productService = productService;
_view = view;
}
public void Display()
{
_view.TopSellingProduct = _productService.GetBestSellingProducts();
_view.CategoryList = _productService.GetAllCategories();
}
}
public interface IHomePagePresenter
{
void Display();
}
作者說:
我已經定義了這個(HomePagePresenter的接口)來松散地耦合代碼並幫助測試。
我無法理解他將如何使用presenter界面創建測試? 當我查看nmock示例時,他們也沒有為演示者創建任何界面。
使用接口公開Presenters有很多原因:
多態性 - 您可以使用多個IHomePagePresenter
實現,並可以使用本地上下文依賴注入解析來確定在運行時使用哪個。
在測試期間進行模擬 - 您可能需要模擬此特定的Presenter以進行單元測試,並且對於接口創建模擬比使用具體類更容易。 這實際上也屬於多態性,但它是一個具體的現實世界的例子和松散耦合。 “松散耦合”基本上能夠快速輕松地交換類的實現,而無需更改太多/任何代碼。 測試場景是您正在測試一個Presenter類,它可能引用另一個Presenter接口 - 您將模擬其他Presenter對象而不是使用具體類。
方法/屬性訪問限制 - 接口限制您可以查看/使用的實現的哪些部分,因此,例如,如果HomePagePresenter
有許多方法/ proeprties,該類的常規使用者不應該使用/有權訪問,您可以限制什么他們可以通過使用界面暴露類來使用。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.