初學ASP.NET MVC學習筆記(二)

初學ASP.NET MVC學習筆記(二)

今天看了 ASP.NET MVC Overview (C#) 這篇文章,基本上就是對MVC的一個概觀

說明使用MVC架構的優點,使用Web Form的優點等等。

不過在看這篇文章的時候,總覺得似曾相似,原來是曾在保哥的Blog中看過他整理的

資料(ASP.NET MVC 常見問題解答 Part 1 ),難怪今天看起原文來輕鬆又寫意。

使用MVC的特點:

  1. 能更容易的管理複雜的系統。(這點我同意,分了三層哪裡有問題就看哪裡。)
  2. 不能使用ViewState及伺服器控制項。
  3. 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.(這一點在說什麼我還不是很清楚..)
  4. 對TDD提供更好的支援(什麼是TDD之後會說明。)
  5. 適合大團隊來開發。

那什麼是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 由於太多專有名詞我也是第一次看到,因此用我個人的理解方式來做一個學習紀錄。

如果有任何解釋錯誤或是不清楚的地方,也請不吝惜指教。

有些東西,也許要等到我有更多開發經驗之後,才能寫出更完善的解說囉。