2011-10-10 107 views
7

我一直在編碼多年,發現自己處於一種沮喪的狀態。我正在研究一種新的基於Web的服務,該服務也具有UI,並且將從頭開發。它會使用一些開源組件,但主要是一個新的東西。基於Web的信息系統的PHP/JavaScript設計模式

但這是我的問題。建立這樣的系統意味着建立所有這些組件:

  • PHP後臺
  • HTML視圖
  • CSS樣式
  • JavaScript的前端
  • AJAX異步連接

我想他們都遵循相同的「模式」,以這種方式,系統中的模塊由一個文件夾或一組文件組成,這些文件包含所有這些c該模塊中的組件。

但是我很難得到這個架構,所以我很喜歡它。這是我到目前爲止:

  • 整個主系統或多或少寫在程序PHP。這解決了請求URL,處理緩存,日誌記錄和調試,並加載到其他組件中。
  • PHP在構建頁面時,會根據當前模塊加載模塊特定的JavaScript文件,CSS文件,HTML文件和其他組件。這意味着每個模塊都儘可能輕便,同時可以根據當前模塊的需要進行擴展。
  • 系統還包含可在系統範圍內使用的對象(如「用戶」或其他類的類)的OOP組件。
  • 該系統是用MVC原則構建的,儘管沒有OOP。

但是我確實感覺到 - 以過程方式構建主系統。我開始在OOP開始寫它,但很快就發現自己頭痛,因爲必須讓所有的東西都適合同一個系統。這是OOP,但它緊密結合,在寫OOP方式時我不喜歡它,組件實際上並不是獨立的,或者只是一個管理的麻煩。

是否有任何模式或指導我可以按照以獲得更好的結果?我喜歡當前系統的是,我可以調用任何東西,預覽視圖呈現PHP或HTML視圖,CSS樣式,附加的Javascript函數和按需AJAX通信,保持腳部小巧玲瓏,但感覺很髒。我甚至使用全局的主數據庫連接(儘管它是一個全局對象)。

任何想法?如果它只是一種語言,那麼它就不會成爲一個問題,但試圖讓所有的東西一起工作有點讓人頭疼。

謝謝!

+3

你已經研究數千種PHP框架的/ CMS系統的/ etc?有很多這方面的例子。 – Mat

+0

它很難回答你的問題,因爲你沒有提出任何真正的問題。我目前正在研究這樣一個幾乎和你的系統一樣的系統,但是有一些差異。我正在使用MVC/OOP。我無法想象你正在程序上處理它。我認爲,直到你的項目有一些界限,在OOP中不應該有任何問題。 –

+0

您可以查看企業應用程序架構模式,GoF模式等,並自己實施它們。然而,最簡單的(也是最明顯的)答案是查看框架(已經面對這個_exact_問題)是如何實現這些模式的,並且(a)使用框架或(b)將框架的方法調整到您的應用程序中。在你選擇的範例中尋找開源框架,查看他們如何做事,並看看你的應用程序有什麼樣的嘲弄。 –

回答

4

http://agiletoolkit.org/實現您正在尋找的內容。它的源代碼可在http://github.com/atk4/atk4上找到,所以你可以從那裏學習。

我學到了很多東西,而creating Agile Toolkit

  • 看看桌面系統。 - Cocoa,目標Windows和其他面向對象的桌面系統早已解決了這些問題。創建視圖,連接操作,定義回調。它映射到HTML模板化視圖,JavaScript綁定和AJAX請求。

  • 運行時對象樹。在Agile Toolkit中,第一階段是初始化。在這個階段,對象被插入彼此。例如,將Button添加到Form中並將Form添加到Page中。然後是渲染階段,從所有東西遞歸地生成HTML。這更有意義的是讓組件回顯HTML。

  • jQuery UI小部件。使用這些是解決許多問題的好方法。 Agile Tolokit中的視圖可以與各自的jQuery UI Widget進行交流。

  • 您提到的對象是Agile Toolkit中的「Models」。如果你正在尋找獨立版本,你可以依靠一些ORM框架。我已經讓自己的觀點更加緊密地融合在一起。

  • 重新考慮解耦。如果你正在開發自己的所有系統,那麼耦合給你帶來很多好處。特別是如果它是面向對象的架構,並且你繼承了東西。您需要一些Java經驗或桌面開發經驗才能正確使用這些東西。

鏈接:

+0

這不完全是我正在尋找的東西,但它肯定比我臃腫的框架更接近我的想法。 – kingmaple

2

不知道別的,我的想法:

  • 如果你不喜歡你的OOP代碼,你可能設計是錯誤的。面向對象的想法是對象很自然地表示事物,因此它們應該很容易處理。如果這是你不喜歡的耦合,那麼有技巧可以解決這個問題。
  • 聽起來像你的MVC模式是錯誤的。 HTML/CSS/JavaScript的東西都應該在視圖方面處理。在我看來,你已經使用了一些MVC原則,而忽視了其他原則。當然,如果沒有你的代碼,這隻能是一個懷疑。
+0

嗯,這取決於。從最經典的意義上講,MVC與人們通常實現它的方式不同。 Javascript和瀏覽器是一個控制器,而不是一個視圖。但是,除此之外,我的主要問題是,我有這個巨大的單一類的主引擎,這是毫無意義的,因爲一切都依賴於它。我一直覺得,如果有一個類的單個實例(並且永遠不會超過一個),它首先不應該是一個類。 – kingmaple

+0

我同意JavaScript的一部分:它可以是控制器的東西。如果你只能有一個類的實例(並且永遠不會有多個),那並不意味着你不應該上課。然而,這聽起來像你試圖上帝類。不要這樣做。 –

+0

但是,你可以推薦我看看?因爲我需要一個包含主要組件(如主CSS文件,用於PHP和JavaScript/AJAX的主函數庫以及CSS文件,函數庫和每個模塊按需的JavaScript/AJAX的主要函數庫)的系統。我希望儘可能減少佔地面積,而每個模塊都可以獨立工作。現在我同意這些模塊應該是主類的擴展類,但是如何構建它的工作架構呢?如果不在上帝階級中,解決方案在哪裏?我只需要一些指導,因爲我不想妥協:) – kingmaple