初學ASP.NET MVC學習筆記(二)
今天看了 ASP.NET MVC Overview (C#) 這篇文章,基本上就是對MVC的一個概觀
說明使用MVC架構的優點,使用Web Form的優點等等。
不過在看這篇文章的時候,總覺得似曾相似,原來是曾在保哥的Blog中看過他整理的
資料(ASP.NET MVC 常見問題解答 Part 1 ),難怪今天看起原文來輕鬆又寫意。
使用MVC的特點:
- 能更容易的管理複雜的系統。(這點我同意,分了三層哪裡有問題就看哪裡。)
- 不能使用ViewState及伺服器控制項。
- It uses a Front Controller pattern that processes Web application requests through a single controller. This enables you to design an application that supports a rich routing infrastructure. For more information, see Front Controller on the MSDN Web site.(這一點在說什麼我還不是很清楚..)
- 對TDD提供更好的支援(什麼是TDD之後會說明。)
- 適合大團隊來開發。
那什麼是TDD? 請先看 維基百科-TDD
測試驅動開發(Test-Driven Development)是軟體開發的一種,在我看完了整個說明,然後找了一些資料看過之後,對他的內涵理解大概如下:
先對程式的執行流程去做測試;在確立了流程之後,在正確的流程下去撰寫程式碼。
在我自己的學習經驗中,寫程式的人大概分為兩派:
一派是瘋狂的寫Code,然後整個段落完成之後,再進行測試。
一派是先規劃流程,然後寫好一個環節就做一次測試。
當然有那種號稱人體編譯器的天才,寫Code一次OK的,但大部分的時候,還是按部就班
的經由測試,然後修改,才能讓整個系統順利運行。
而TDD的概念就是先寫測試,再寫實際的程式。咦?還沒有程式怎麼測試呢?
這也是我覺得弔詭的地方。
不過請看 這才叫 TDD!VS2010實際演練TDD流程 這篇範例說明之後
大概可以了解什麼叫先寫測試再寫程式。
另外在此篇文章中,有提到 Dependency Injection (DI) 和 Inversion of Control (IOC)
這兩個名詞,那也是先看看 維基百科-DI-IOC
中文意思叫做控制反轉(IOC)或依賴注入(DI),聽起來就不是什麼友善的東西。囧
基本上也是一種設計模式,目的是在減低程式與程式之間的依賴性。
例如說小孩跟父母要錢,代表這個小孩還依賴於父母。
假使父母希望小孩經濟獨立,就將小孩託付給鄰居老王,要他每天去老王家幫忙掃廁所
然後父母出錢給老王,老王再將薪水交給小孩。雖然到頭來,錢還是父母出的,但小孩
不是直接跟父母要錢,所以算是經濟獨立。.....好吧,是個爛例子。
那接下來用程式碼的方式來看。
public class 父母 //一個父母類別
{
public void _零用錢() //一個發零用錢的方法
{
Console.WriteLine("拿到零用錢");
}
}
public class 小孩 //一個小孩類別
{
public void 伸手拿錢() //一個拿錢方法
{
父母 p = new 父母(); //必須new出父母的實體
p._零用錢(); //利用父母的方法去拿錢
}
}
上面的程式碼就是小孩依賴於父母的例子。
再看下面的程式碼。
interface I老王
{
void _零用錢();
}
public class 父母:I老王 //一個父母類別,實做老王介面
{
public void _零用錢()
{
Console.WriteLine("拿到零用錢");
}
}
public class 小孩 //一個小孩類別
{
public void 伸手拿錢() //一個拿錢方法
{
I老王 p = new 父母();
p._零用錢(); //利用父母實作老王的方法拿錢
}
}
上面的程式碼,做了一個老王的介面,然後父母類別實作老王介面。
所以小孩叫用的方法其實是老王的方法,減低對父母的依賴關係。
上面的程式碼是為了說明寫的,實際上應用當然不會這麼的隨便,但基本上依賴注入
大概就是這個意思。
更深入的研究,請看保哥這篇 Unity Application Block 與 ASP.NET MVC 學習資源整理
等我有更深一層的認知時,再來跟大家分享。
p.s 由於太多專有名詞我也是第一次看到,因此用我個人的理解方式來做一個學習紀錄。
如果有任何解釋錯誤或是不清楚的地方,也請不吝惜指教。
有些東西,也許要等到我有更多開發經驗之後,才能寫出更完善的解說囉。