2013-02-08 92 views
1

我期待在JavaScript中模擬接口和DTO這個問題。 一個對象dto,一個對象調用者和相同Interface IWorker的不同實現。Javascript:接口和DTO

調用者將接收一個dto實例化,將用用戶輸入提供它,然後調用Iworker(方法執行)的正確實現。

我想,在我的代碼,我DTO的中庸之道一個實例,調用者的一個實例,所以我將有中庸之道調用caller.CallWorker()每次用戶作出另一種選擇

請告訴我,如果這個想法是好還是不好,並在JavaScript任何實現是值得歡迎的

非常感謝

編輯: 感謝您的幫助,將採取BERGI的解決方案,但我需要一件事 所以我的實現將是像th一樣是:

var caller = { 
    callWorker: function(obj) { 
     if(obj.id == 1) Worker1.execute(); 
     if(obj.id == 2) Worker2.execute(); 
     if(obj.id == 2) Worker3.execute(); 
    } 
}; 

但這意味着我必須在html頁面中添加所有工作者定義(每個實現一個js腳本)。 我想只是動態地添加腳本,實際上活動工作者依賴於很多業務邏輯,所以我將動態包含它們以使頁面中只有活動的工作人員。 你如何推薦我做?在caller.callworker中執行所有條件嗎? 還是有更優雅的方法。

回答

2

我期待模擬接口

有沒有「接口」,在動態類型語言的JavaScript,以及有沒有類。最近的模擬是一個函數,用於檢查給定的對象是否有一組特定的方法;但它不能進行任何類型或功能測試。

和DTO

最近的事情到DTO是JSON-serialisable對象。這意味着它沒有周期,不包含對象,甚至不包含主機對象。

我想,在我的代碼,我DTO的中庸之道一個實例,調用者的一個實例,所以我將有中庸之道調用caller.CallWorker()每次用戶作出另一種選擇

這是另一種設計模式:單身。它們可以很容易地用JS編碼,因爲對象可以隨時創建,並且不需要需要防止多個實例化的類和構造函數。只需使用對象文字。

在JavaScript任何實現是值得歡迎的

這只是一個簡單的例子,但如果你需要,你可以擴展它:

function makeDTO(id) { 
    // creates a basic data structure, with empty or default values or from parameters 
    return { 
     id: id, 
     userInput: [], 
     validate: false, 
     … 
    }; 
} 
var caller = { 
    callWorker: function(obj) { 
     // do something 
    } 
}; 

var dto = makeDTO(14); 
caller.callWorker(dto); 
var asString = JSON.stringify(dto); 

或有更好的方法。

能使工作者數組或對象。例如

var workers = { 
    1: {/* std worker #1 */}, 
    … 
}; 
// then the caller will look like this: 
var caller = { 
    callWorker: function(obj) { 
     var workerName = obj.id; // just the id? Or something more complex 
     if (workerName in workers) 
      workers[workerName].execute(obj); 
     else 
      dynamicallyLoadWorker(workerName, function callbackWhenLoaded(worker) { 
       workers[workerName] = worker; 
       worker.execute(obj); 
      }); 
    } 
}; 
+0

我已經編輯了這個問題,我還需要一個建議。 感謝您的幫助。 – 2013-02-09 10:18:10

+0

我不需要動態加載工具。我將包括所有活動的工作js文件在頁面的第一負載,並會產生陣列工作服務器方太 感謝您的解決方案 – 2013-02-09 12:39:29

+0

啊,我看你想預* * -load他們動態。但是,你可以看到使用收集的oppurtunities ... – Bergi 2013-02-09 13:06:31

1

由於JavaScript是動態輸入的,因此不需要構造interface。你可以調用你的方法來實現你的每一個實現,而不需要從接口繼承。就DTO而言,同樣的答案確實適用。您可以使用JSON構造一個對象,但是您可以通過電線將其傳輸,而不需要您提到的任何靜態類型構造。

+0

我必須做一些關於動態類型語言的搜索。 所以,如果我理解你,我可以這樣做: 功能DoSomething的(OBJ){ 如果obj.id == 1 obj.execute(); if obj.id == 2 obj.doExecute(); };因此不需要實現一個接口,只是可能只是爲了優雅的目的。 – 2013-02-09 10:23:22

1

JS.Class允許您創建interfaces

+0

有很多js框架,所以我不知道從哪裏開始。 微軟與打字稿,谷歌... 你認爲我最好學習哪一個?或者只是JS OOP就夠了 – 2013-02-09 10:31:51