簡體   English   中英

JavaScript中的模塊+ Fascade + Mediator組合

[英]Modules + Fascade + Mediator combination in JavaScript

我已經讀完http://addyosmani.com/largescalejavascript/上的精彩文章

本文將介紹如何將模塊,外觀和介體組合在一起以用於JavaScript應用程序。

我可以編寫文章解釋的內容,但我不明白為什么我需要使用facade來訪問中介。

我想我可以直接從我的模塊訪問調解器。

請建議我..

PS:這是一個有效的問題嗎?

該部分的參考資料Pro Javascript Design Patterns在說出以下內容時非常好地回答了您的問題:

外牆絕對不是必需的。 沒有它們就可以完成相同的任務。 這是一種組織模式; 它允許您修改類和對象的接口,以方便您。

以Thedric Walker的答案為基礎......

拿這個,也許是荒謬的比喻:

你是一只啄木鳥(模塊),你想挑選一些已經躺在房子支撐結構(核心)上的幼蟲(數據)。 通常情況下,你只是啄(實際上啄木鳥有一個長長的帶刺的舌頭纏繞在他們的頭骨上)幼蟲離開基礎設施,但是一些木匠(應用建築師)在房子的外面應用了一個門面。 然而,木匠是不夠好在門面 允許啄木鳥訪問幼蟲。 此外,木匠足夠聰明,可以使這些形成一定的形狀 - 允許啄木鳥在每次啄食時完成更多的幼蟲食用任務。

那又為什么要再有一個立面呢?

將Facade重新關聯到Addy的帖子 - Facade增強了Sandbox ,因為沙箱提供了預定義的功能,允許一個模塊以特定方式完成任務,例如批發。 例如,您不希望強制用戶編寫的沙箱:

var node = getNode('#errorPanel'); node.innerHTML = 'Field is invalid!';

一個更好的沙箱可能有類似的東西:

notifyUser.error('Field is invalid!');

門面 ,另一方面,可以提供這些throughways一樣的,僅聽mediator.fire('error:Validation', 'Field is invalid!')通道。

我一直使用的Addy帖子中的Facade理論上可以簡單地將請求轉發到Core上。 也許,它會檢查通道信號中的某些東西,以確保,比如說,芬奇不會試圖啄食會使它生病的幼蟲 - 例如拋出異常。

這就是為什么為你的核心提供一個單獨的通道介質(即中介)是有意義的,你的Facade是Core的唯一“參考者” - 你的模塊只引用Facade 另一種方法是在你的團隊中強制執行 離散通道名稱的約定,例如mediator.fire('ready://Core')mediator.fire('updated://ToDos/task', taskId) facade會聽'updated://ToDos/task'並會向core發出請求 - 這可能看起來像:

var thus = mediator.installTo(this);
this.on('updated://ToDos/task', function(id){
    thus.fire('request://Core/save/todo', id);
    thus.fire('user://Core/notify/task/added', id);
});
this.on('response://Core/save/todo', function(err, id){
    if(!err){
        // ... success -- notify module!
    } else {
        // ... notify for failure :(
    }
});

注意! 直接監聽通話中寫你處理!

真的希望這會有所幫助,而且我不會因為談論鳥類而被投票;)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM