2014-04-04 37 views
0

我有一個網頁的編輯產品和UI具有不同的行爲取決於產品類型。取決於類型的UI行爲 - 背後的模式是什麼?

它在於細微的變化像: 特定字段是強制性的只是一個產品類型,一個下拉列表中有2種產品的選擇較少,一個ajax調用不同的URL光等

1 /我如何使用JavaScript編寫的「優雅」的代碼,所以我想尊重開放 - 封閉原則,以避免類似情況:

var idType = $('#idtype').val(); 
if (idType == 3) 

...

2 /有沒有在JavaScript中使用"enums"的方法?

3 /是否存在引用這種情況的設計模式?我知道最近的是Strategy模式。

4 /在我的情況下,這些變化可以在JavaScript代碼來處理。但是我應該怎麼樣當行爲不同客戶端和服務器端

回答

0
  1. 您可以使用開關,看下面的例子。
  2. 不能在本機模式,但你可以模擬一個,例如:

    var MyEnum = { 
        LittleBall: 1, 
        MediumBall: 2, 
        BigBall: 3 
    }; 
    
    var idType = parseInt($("#idtype").val(), 10); 
    
    switch(idType) { 
        case MyEnum.LittleBall: 
         // do stuff here 
         break; 
        case MyEnum.MediumBall: 
         // do stuff here 
         break; 
        case MyEnum.BigBall: 
         // do stuff here 
         break; 
        default: 
         break; 
    } 
    
  3. 什麼你的意思模式確實?

  4. 您的客戶端行爲不應該與服務器端行爲不同。
+0

開閉原理呢? –

0

這就是爲什麼繼承存在。將「正常」方案放入Product。使其成爲ThatProductWithFewerOptions,ThatProductWithMandatoryField等的原型。覆蓋與通用Product不同的功能。有一個從ID映射到產品構造函數的查找;如果它不是特別的,你可以使用Product。然後只需撥打product.checkMandatoryFields(),product.ajaxURL等。不再有if s。

或者,處理所有差異服務器端(再次,類工作奇蹟)。這樣你就不需要兩次實現一切。或者,如果您有服務器端的Node.js,則相同的代碼可以在兩端運行。

我想這是工廠模式,如果我真的需要它命名(Product.getInstanceFor(idType))。

相關問題