1. 程式人生 > >完整JavaWeb專案筆記 第十部分-Javascript的MVC設計模式

完整JavaWeb專案筆記 第十部分-Javascript的MVC設計模式

文章目錄

一 MVC是一種設計思想

  老生常談的一個詞兒“MVC”,各種框架都會說自己是MVC、MVVC或者其他的云云,那麼MVC到底是什麼?我個人傾向於這是一種設計思想。將業務設計、資料訪問以及請求處理或檢視繪製等功能實現分離,各自進行調整時而不會產生嚴重的耦合問題。這是對程式碼可維護性、健壯性的一種保障。

  在進行服務端設計的時候,Service層、Dao層及Servlet層是相互分離的,Service層僅僅處理業務邏輯,Dao也只是進行資料訪問,Servlet做的更少僅處理請求並做應答。

  Javascript雖然不是嚴格的面嚮物件語言,但這並不妨礙我們使用MVC的設計思想來實現功能。

  之前在漢普做產品設計的時候,同組有一個做前端小夥子,據說有三年的前端開發經驗,我必須承認,其編碼熟練度是完全OK的,但是我並不贊同他的設計方法,就此事我們也爭論過很多。殘酷的事實證明了我是對的,當他的Js檔案已經超過了五千行甚至八千行,存在了大量重複程式碼後,哪怕我們僅僅想做一個很小的功能調整,也已經變得異常困難(每次變動都需要全文搜尋,逐行檢查,有相互呼叫的時候簡直要摔鍵盤)。

  後來他跟我抱怨說,工作壓力太大,不想做了。其實根源上就是程式碼結構的不合理導致的,這一點對於任何一個強大的開發者而言都是致命的。當重構已經變得困難,那麼維護也無從談起,倍增的額外工作給精神上造成的壓力不可小覷。

二 面向物件的設計

  Js的編寫很靈活,它的靈活性為編碼帶來的無限的可能性,充滿了未知的魅力。靈活本身就是個雙刃劍,如果你對Js的解釋邏輯不甚瞭解,那麼你的每一行程式碼都可能存在Bug。我不建議任何人,哪怕是有著豐富工作經驗的前端開發者,使用任何看似華麗簡潔的語法。

  能通過基礎語法實現的功能,絕不用更難以遷移的語法特性代替(如果你做過跨語言平臺設計,那麼翻譯工作可能死在特殊語法上,那時你會知道你多麼的痛恨華麗的語法特性)!華麗的設計應該是模式上的美觀,更好的功能延展,更強的維護效能,更清晰的邏輯結構。

  所以我建議編寫Js儘量以物件的方式進行設計,將方法、屬性都封裝在物件內部,這樣不論對於程式碼本身的良好結構,還是團隊協作時可能產生的覆蓋問題,都能最大限度的提供保障。

  我本身並不怎麼會寫Js,我更擅長將Js當作Java與Json的結合體。這裡我列舉自己常用的一種Js編寫模式,大家也可以從網路上搜索其他朋友的建議。這是基於Jquery實現的使用者登陸頁的指令碼,僅僅定義了基本的結構,後面章節會把實現補充進去,Jquery語法大家可以從其他途徑瞭解,如下:

$(function () {
    LoginPage.initial();
});

var LoginPage = {
    initial: function () {
        LoginPageMVC.View.initial();
    },
    urls: {
        base: 'http://localhost:8080/JianZi',
        login: {
            url: BaseUrl + '/user',
            method: 'POST',
            params: {
                'action': 'login',
                'phone': '',
                'password': ''
            }
        },
        register: {
            url: BaseUrl + '/user',
            method: 'POST',
            params: {
                'action': 'register',
                'phone': '',
                'password': '',
                'nickname': ''
            }
        }
    }
};

var LoginPageMVC = {
    Model: {},
    View: {
        initial: function () {

        },
        refresh: function () {

        }
    },
    Controller: {
        login: function () {

        },
        register: function () {

        }
    }
};

三 簡單的拆解及拼裝

  整個Js檔案裡僅有三部分,頭部是Jquery的標誌性語法:

$(function()){}

  其次是和頁面相關的全域性設定,我常常會寫入請求路徑,初始化頁面的方法排程:

var LoginPage = {
    initial: function () {
        
    },
    urls: {
        login: {
            
        },
        register: {
           
        }
    }
};

  最後一個是和頁面相關的名為MVC的物件,它包含了本頁需要的資料模型、檢視操作(頁面的初始化、更新及其他因資料變動導致的檢視更新操作)以及請求處理方法:

var LoginPageMVC = {
    Model: {},
    View: {
        initial: function () {

        },
        refresh: function () {

        }
    },
    Controller: {
        login: function () {

        },
        register: function () {

        }
    }
};

  整個頁面的處理流暢大致如下:

  1. 通過Page.intial()呼叫MVC.View.intial()初始化頁面
  2. 通過MVC.Controller.function()發起請求獲取資料
  3. 將應答資料繫結至MVC.Model
  4. 通過MVC.View.update/refresh()更新頁面

  so,如此簡單,模式統一,維護方便,連註釋都不需要多加。當然這跟專案規模和具體的應用場景有關,參加過大型專案開發的朋友應該知道規範的重要性,沒有最好,只有更適合,不對此做更多討論。