簡體   English   中英

用Javascript和PHP設計模式

[英]Design Pattern with Javascript and PHP

我正在用PHP創建一個網站,該網站也包含Javascript元素。 這將具有類似於插件系統的功能,在該系統中可以將插件動態添加到網站。

我已經創建了插件系統,但是我不喜歡設計的某些元素。 特別是,我正在使用MVC模式,但是javascript抽象存在問題。

我有一個可以加載所有插件的文件。 然后,有一個javascript文件,根據所進行的選擇,動態地將框添加到窗口中,以了解應使用哪種插件。

在js文件中如下所示:

 if (SelValue == 'image_list')
   image_list(form_name, new_div, parent_div);

 if (SelValue == 'multiple_columns')
   multiple_columns(form_name, new_div, parent_div);

然后,就在下面,緊跟着imagelist()的聲明,依此類推。 當然,這很麻煩,當然看起來也不是一個好習慣。 我想對所有這些進行抽象和隔離,因此,如果可能的話,插件只是添加到我的代碼中的一個簡單步驟。

您是否知道適合這種情況的任何設計模式或實踐?

您可以創建一個對象容納像所有功能image_listmultiple_columns 使用它們看起來像:

plugins[SelValue](form_name, new_div, parent_div);

添加新功能如下所示:

plugins.image_list = function (form_name, new_div, parent_div) {
    /* … */
}

此定義可以放在其他文件中。 這是你的意思嗎?

編輯:漂亮的單文件版本:

plugins = {
    image_list: function (form_name, new_div, parent_div) {
        /* … */
    },
    multiple_columns: function (form_name, new_div, parent_div) {
        /* … */
    },
};
plugins[SelValue](form_name, new_div, parent_div);

如果您的IF語句不超過2個,那就足夠了。 但是,如果您要擴展它(或可以預見它會擴展),那么我建議使用Factory / Command設計模式。 實現細節將包括一張表或一個詞典,以替換您將擁有的多個IF語句。

模塊模式可能非常適合您的需求。 這種模式基本上會將每個“插件”視為一個模塊,其本身應具有完整的功能且獨立。 然后,您將擁有一個模塊加載器/控制器,該模塊負責加載正確的模塊,並使模塊彼此通信。

http://www.adequatelygood.com/2010/3/JavaScript-Module-Pattern-In-Depth

http://www.yuiblog.com/blog/2007/06/12/module-pattern/

暫無
暫無

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

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