[英]Programming to Interfaces and using loose coupling - studing TDD, unit testing and DI
問候,讓我們假設我有一個名為Formater:IFormater
的類和一個LoadData()
方法,如下所示:
public interface IFormater { void LoadData(string strSomeData); }
public class Formater : IFormater { public void LoadData(string strSomeData) {/*do some magic*/} }
假設我還有一個名為View:IView
的類和一個LoadRawData()
方法,如下所示:
public interface IView { void LoadRawData(string strSomeData); }
public class View : IView {
private IFormater _formater;
public View(IFormater formater) { _formater = formater; }
public void LoadRawData(string strSomeData) { _formater.LoadData(strSomeData); }
}
現在,在我的編中,我創建了一個View
類的對象,並調用LoadRawData()
,如下所示:
static void Main(string[] args) {
kernel = new StandardKernel(new Modules()); //ninject
formater = kernel.Get<IFormater>(); //ninject
IView view = new View(formater);
view.LoadRawData(args[0]);
}
我使用ninject作為DI機制,實際上現在一切正常。
問題:
具有IView
接口在內部調用Formater::LoadDtata()
是否正確? (對於我自己,我看不到任何其他方式)。
我應該為Formater::LoadData()
和View::LoadRawData()
使用不同的名稱,還是應該使用相同的名稱,或者也許有一種練習如何命名它們?
對不起。 看來我犯了幾個嚴重錯誤。 我已經在上面更正了它們。 實際上我不使用MVC模式。 我只是這么想。
關鍵是我想將顯示邏輯與解析和格式化隔離。
我的控制台應用程序應該打開一個文件,讀取文本內容並將其傳遞給formater類,這將進行一些格式化並將其帶回(但在該格式化程序將其傳遞給解析器以從原始文本中提取必要的內容之前),例如此視圖<->格式化程序<->解析器
這是簡單的編,我用它來更好地理解一些最佳方法和實踐,例如TDD,單元測試和DI。
很抱歉以前的不一致。
要回答的問題1),因為你正在使用的MVC模式,你的具體視圖(不IVIEW這是一個接口) 不應該叫一個IController :: LoadData()。 模型,視圖,控制器之間的關系如下所示:
(從拍攝的圖像這一文章這給MVC的基本定義)
相反,控制器應將LoadData數據放入模型中,然后控制器應返回與該模型關聯(即可以訪問)的視圖。
例如,在ASP.NET MVC中,您可以執行以下操作:
public class YourController : Controller
{
IDataRepository db;
public YourController(IDataRepository db)
{
this.db = db;
}
public ViewResult Index()
{
YourModel model = db.LoadData();
return View(model);
}
}
您試圖從控制台應用程序使用MVC模式的事實無濟於事。 我建議通過MVC教程(例如, 這很好)來獲得更好的理解。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.