應用級 - JS的簡單分層

基礎級 / 進階級已經無法概括這篇文章的氣質,上圖:
我愛學習

  咳咳,言歸正傳,這幾日忙於寫JS小遊戲,大量而繁雜的JS變量、接口,以及HTML5環境下,JS的重要性,這兩者令我有寫出這篇文章的想法。

  首先聲明,JS作爲腳本式語言,肯定是無法和完全OOP的語言相媲美1,本文也無意去做這樣的用功。我們希望通過設計模式的一些淺顯思想,來完成JS模塊的初步優化

架構

  沒有學過架構,也沒用看過關於架構的書,卻來妄談架構,在大牛眼裏一定是非常狂妄的,但毫無疑問,一個連簡單分層都沒有實現的JS代碼簇,是相當紊亂的。

  MVC顯然是一個拿來急用的好東西。將JS簡單分爲三部分:控制層、模型層和視圖層——顯得不倫不類,那我就二次修改吧。控制層依然負責調用,模型層則寫入大量的數據處理的原型,視圖層取消掉,取而代之的是數據層
  
  數據層介於M與C之間,是控制器接受請求之後,傳入模型層的數據集,這樣的規劃可以最大程度保障模型層代碼的功用。
  
  個人拙見,將任何核心功能代碼寫死,都是相當糟糕的設計。一個核心功能,應該能在相當程度上保證自己的健壯性。

具體設計

  本人這款小遊戲簡單的將JS代碼分爲功能(function)與控制(controller),數據不算多,集成在 controller.js
  首先是功能,在0.11v中,我加入了稅收,當時設定了三種稅務,並且基本上都寫死了具體內容。後來,遊戲內容開始橫向拓展,稅收需要一種更有彈性的設計方式——稅收品種增多。

// 工/商/人頭 稅
var tax = (function() {
    var pollTax = function() {
        var taxValue = get('population') * 0.03;
        purseSub(-taxValue);
        var message01 = '<div>您收到人頭稅金,合計:' + parseInt(taxValue) + '</div>';
        message.plus(message01);
        message.output();
    };

    var commerceTax = function() {
        var taxValue = get('market') * 0.19;
        purseSub(-taxValue);
        var message01 = '<div>稅金到帳:共' + parseInt(taxValue) + '銅幣</div>';
        message.plus(message01);
        message.output();
    };

    var industryTax = function() {
        var taxValue = get('plant') * 0.15;
        purseSub(-taxValue);
        var message01 = '<div>''稅金收取完畢,合計:' + parseInt(taxValue) + '銅幣</div>';
        message.plus(message01);
        message.output();
    };

    return {
        pollTax : pollTax,
        commerceTax : commerceTax,
        industryTax : industryTax
    };
})();

// 稅,改變後版本
var tax = (function() {
    var Tax = function(taxName, taxKey, taxPoint) {
        var taxValue = get(taxKey) * parseInt(taxPoint);
        purseSub(-taxValue);
        var message1 = '<div>' + taxName + '稅金到帳:共' + parseInt(taxValue) + '銅幣</div>';
        message.plus(message1);
        message.output();
    };

    return {
        Tax : Tax
    };
})();

  如此優化之後,不但代碼本身少了很多,而且接觸了寫死的綁定,正交增強。接下來,無論是拓展個性化的收稅提示,還是增多稅種,都只是業務層面的問題了,Core已經完成。
  相信到這裏,分層的好處已經清晰體現了。

結語

  上述的分層是相當粗略爲簡單的,肯定有更好更優秀的分層方式(譬如MVVC——儘管相當多的後端大牛吐槽MVVC是半成品,但不能否認這是前端的進步),希望大家也能在自己的編程經歷中,總結出一套適用於自己的分層方式。
  最近接觸了一些HTML5的訊息,JS、Canvas、前端框架,纔會愈發感觸到“應用型Web”的意義與好處,儘管無法預料編程本身是否都向着應用去發展,可一個漂亮而簡單的劃分,可以讓編程者的心情好很多。


  1. 肯定會有大牛對我的看法不屑一顧,但對目前的我而言,顯然是無法將JS運用自如的。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章