我寫了一個D6模塊,它爲用戶提供了溝通,配置參數和測試第三方API服務的能力。
該模塊按預期工作,但我想分開communicator類並將其捆綁爲foo模塊。然後將其餘(管理頁面)作爲foo-ui模塊打包。就像意見和觀點一樣。
我不知道什麼是最佳做法/設計模式。任何想法?分離Drupal模塊邏輯和UI
回答
據我所知,目前還沒有具體的模式,但始終有一個問題:
- 爲什麼我應該將模塊的邏輯和用戶界面分成多個模塊?這真的需要嗎?
它的需要,只有當你已經開發出可以接受不同的UI就像views和simple views的模塊。海事組織沒有其他理由這樣做。
好的,假設我們的模塊需要_ui
的東西。在這裏,我嘗試將模塊的核心功能與其配置用戶界面分開來作爲示例。看看Unfuddle API module,這是一個非常小巧,簡單的模塊,適合我們的案例。這裏是$ tree ./unfuddle_api
:
unfuddle_api/
|-- LICENSE.txt
|-- README.txt
|-- unfuddle_api.classes.inc
|-- unfuddle_api.info
|-- unfuddle_api.install
|-- unfuddle_api.module
0 directories, 6 files
閱讀它的代碼! unfuddle_api.install
不安裝模式,但實現hook_uninstall()
刪除模塊卸載中使用variable_del()
幾個變量。這些變量實際上是將在模塊的管理頁面中設置的API連接參數,您的模塊中也可能有一些參數。
IMO這是要遷移到unfuddle_api_ui
模塊的部分。
文件unfuddle_api.classes.inc
是unfuddle的API包裝類,它以某種方式包裝在將用於實例化對象的類中的第三方代碼。
IMO應該保留在覈心模塊中。但爲了設計起見,我們必須通過刪除variable_get()
調用並將傳遞的參數直接設置爲類屬性來更改構造方法。我們稍後將在.module
文件中添加它們。
文件unfuddle_api.module
包含主模塊代碼,hook_menu()
的hook_perm()
加一的實現,創建管理頁面,並命名爲unfuddle_api_create()
一個輔助功能,這是莫名其妙地Factory助手來創建Unfuddle
類unfuddle_api.classes.inc
編碼的對象。
國際海事組織兩個掛鉤實施應移植到_ui
模塊。上面討論的unfuddle_api.classes.inc
的部分variable_get()
部分也應該加入unfuddle_api_create()
功能。
所以,作爲一個提綱:我們有一個unfuddle_api
模塊,它充當Unfuddle
API類的包裝。它爲我們提供了所有功能,但沒有配置UI。所有配置都應通過代碼中的unfuddle_api_create()
模塊進行設置。
我們還得到了一個unfuddle_api_ui
模塊,該模塊取決於unfuddle_api
模塊,如果啓用,將爲我們提供UI中的核心模塊配置。
希望它有幫助。
有沒有簡單的答案。您需要強制與用戶界面分開功能。因此,您需要將程序的所有API放在一個模塊中,並將用戶界面放在另一個模塊中。爲您的API編寫測試用例 - 使用simpletest模塊。通過編寫測試用例,您將成爲API的「消費者」。實際上,您可以延遲UI的實現足夠長的時間,以確保在模塊中具有負責「核心」功能的正確的一組函數/類。
你也應該探索CTools模塊。它提供了一些有用的工具,如能夠導出等等。
Drupal沒有像Java或C#這樣的書籍形式的豐富文獻。但PHP呢。查看關於PHP設計模式的書籍。雖然我還沒有讀過它,但Manning的「PHP in action」似乎對你所要求的東西有很多東西。
做這種事情的另一種方法是看別人是如何做到的。 imagecache模塊足夠小,它將UI和功能分開(還有一個獨立的Imagecache UI模塊需要啓用)。爲什麼不實際探索imagecache的源代碼? [查看爲1 MB的+源代碼,因此它可能不是一個好主意,探索,只是還沒有:-)]
對於不使用UI關閉的模塊也是有用的。禁用UI可保存一些資源。 我建議你檢查imagecache模塊作爲例子。 http://drupal.org/project/imagecache
好的例子在這裏! – sepehr 2010-10-13 23:44:44
- 1. 如何分離模型(業務邏輯和商店邏輯)?
- 2. 從Backbone.Device分離模板邏輯
- 3. 如何在我的Android遊戲中分離UI和邏輯?
- 4. 將socket.io事件邏輯分離到模塊中
- 5. PHP:分離業務邏輯和表達邏輯,值得嗎?
- 6. 分離邏輯/ GUI和用戶交互
- 7. 分離業務邏輯
- 8. 業務邏輯分離
- 9. 在express/node.js中分離模型,邏輯和DAO
- 10. PyroCMS模塊升級邏輯
- 11. 模塊分離
- 12. 我該如何分離Android中的邏輯/ UI
- 13. 模型邏輯和服務層邏輯
- 14. 在Angular2,如何去耦UI模塊與邏輯
- 15. 什麼是分離UI(設計/編輯)從包框架(如Visual Studio包)邏輯
- 16. statsmodel部分邏輯模型
- 17. 物理或邏輯分離我的dll?
- 18. C#DAL與PL邏輯分離
- 19. 從java中的GUI中分離邏輯
- 20. 從邏輯中分離數據
- 21. JSP - 從邏輯中分離設計
- 22. 如何分離業務邏輯
- 23. 數據建模問題 - 數據和計算和訪問邏輯的分離
- 24. 實現現有的SuiteCRM模塊的邏輯和編輯
- 25. 任何人都可以提出設計模式來分離JavaScript中的業務邏輯和表示邏輯嗎?
- 26. jquery-ui-timepicker&drupal的editablefields模塊
- 27. 如何分離Drupal中的博客模塊?
- 28. F#和模糊邏輯
- 29. 模塊化功能背後的邏輯
- 30. AngularJS模塊注入邏輯瞭解
謝謝,我已經爲API和它的包裝器編寫了測試用例,它們是模塊的核心功能。我認爲有一個特定的模式來分離Drupal模塊的邏輯和用戶界面。再次感謝你。 – 2010-10-12 10:40:05
+1和Manning的「PHP in Action」。我也推薦PHP對象,模式和實踐,第二版by Zandra – 2010-10-12 13:26:12