2016-03-10 48 views
2

比方說,我有一個簡單的多層架構的應用程序。典型的層次可能是(從底部開始,繼續前進):核心/實用程序,實體/數據,業務邏輯和用戶界面。類之間的依賴只應該在「向下」的方向,例如。從用戶界面到業務邏輯,而不是相反。我將如何去執行這在PHP中? IDE(如PHPStorm)可以做到嗎?作曲家能做到嗎?您可以在PHP中執行架構層依賴關係嗎?

如果我在使用Java,一種我更熟悉的語言,我通常會使用Eclipse和Maven。每個圖層都是一個單獨的項目,並會生成一個JAR文件。層將通過類路徑相互依賴。例如,業務邏輯層(或項目)將具有util和實體JAR文件,而不是UI。如果我錯誤地在「向上」方向創建了一個依賴項,那麼IDE會將其標記爲問題並且代碼不會編譯。

我一直無法找到一種方法來實現在PHP中的相同。有任何想法嗎?

+0

在Java中分離所有這些東西的原因之一是因爲整個構建和部署週期需要時間。在PHP中,您只需將文件保存在DOC_ROOT(開發階段位於本地計算機上)並在瀏覽器中聘用F5即可。 –

回答

1

類之間的依賴關係只應該在「向下」方向,例如 。從用戶界面到業務邏輯,而不是相反。 我將如何去執行這在PHP中? IDE(如 PHPStorm)可以做到嗎?作曲家能做到嗎?

一般來說,答案是否定的(或者我還沒有能夠找到ho這樣做)......但是可以通過良好的工程實踐來實施適當的分層。

例如:

  • 系統架構師可以提供整個團隊精心設計 component diagramcomposite structure diagram
  • 系統架構師可以單獨就分項目整個項目,併爲整個項目的依賴性映射。我們使用composer及其composer.json。例如,我們的實體數據層就是這樣的子項目,它具有我們的SOA服務的全套映射器:
  • 系統架構師可以在每個團隊和團隊之間強制執行代碼審查,不僅適用於通用代碼所有權,而且支持適當的分層
  • 使用模板引擎進行UI通常很有幫助(它增加了嚴格性)
  • 團隊的每個成員都應該理解降低系統複雜性的基本概念(向他們展示流行和成功的工程系統,如OSI網絡模型)

一般來說,我的一切在團隊的手中。這就是爲什麼PHP的這種自由可以讓你做出偉大的事情和完全的浪費。這將是很好的完成這個答案與意譯著名的短語:

以較大的自由度越大,責任越大:)

+1

感謝您的好解答。我們確實嘗試並遵循類似的一套做法。然而,奇怪的反向依賴通常會偷偷溜走並破壞某些東西。這就是爲什麼我採用自動化方式來迅速處理這類錯誤的原因。這對開發人員在違反設計規範時獲得即時反饋也非常有用。 – dave

0

的事情是強制執行的每一層都應該知道什麼分離做,我稱之爲責任。每一層都應該對預期的工作負責,而不需要任何一層知道別人怎麼做。 我的簡單體系結構有:

1)與HTML INPUT元素的接口通過第二層類獲取/設置其內容到數據庫。 1.1)更復雜的自定義界面PHP類元素,如VECTOR,SELECT和GRID,允許從此元素上列出的列表中選擇一個數據庫記錄。

2)定義數據屬性和SQL查詢的PHP類。該級別實現基本的FIND,INSERT,ALTER和DELETE類方法,以使用SQL查詢發送/接收數據到/從下一級數據庫訪問。我通常在這個級別上將這些類命名爲數據庫表,並將這些類的屬性命名爲他們將訪問的數據庫表的字段。

3)具有特定數據庫品牌命令(例如MySQL和Oracle)的數據庫類。這個級別可以通過一個類來完成,其中包含所有數據庫的所有命令或每個數據庫的一個類。如果您的系統僅使用一個數據庫您可以讓上一級(2)類知道並解決調用哪個數據庫類。但是,如果您需要訪問同一個應用程序上的多個數據庫,或者需要經常更改數據庫,最好只有一個包含所有命令的類。如果此級別的類只訪問一個數據庫,則它將被命名爲數據庫。

我設計的方式是,幾層通過獲取設置數據在兩個方向上進行通信。

[] s

+0

感謝您的回答。您的架構指導方針看起來合理而實用。但除非我誤解,否則程序員應遵循這些準則。我所追求的是一種自動化的方法(例如一種工具),它實際上實現了這種做法。也就是說,它將分析代碼,並在違反準則時警告程序員。你知道這樣的事情嗎? – dave

+0

當然自動化會很好。沒有抱歉,我沒有去那麼遠。 改變主題,我幾年前完成的是一個自動網站生成,它只做了導航結構並定義了導航菜單將放置的左側和/或上側區域,但是它的實際內容沒有碰。 – user3692317

相關問題