2012-02-28 63 views
3

在我到目前爲止完成的學校Web項目中,我使用3層方法構建了我的應用程序。 數據層,應用程序和表示層。 我已經使用這種架構與Python和Java,我想用它也用PHP。 我對圖層之間的交流非常嚴格,因爲這些是任務的要求,我可以說我發現它非常好,因爲當我嘗試一次從mySQL切換到Mongo db時,這很容易。我只需要更改我的數據訪問對象的功能內的代碼。使用Symfony實現3層體系結構PHP

正如我之前說過的,我現在想在PHP中編寫一個更大的應用程序,並且我下載並安裝了Symfony2框架,它是一個MVC框架。我的意圖是用MySQL初始化測試應用程序,然後使用Redis進行切換和測試。

所以我的問題是: 我可以使用框架的功能和所有「好東西」來編寫一個3層架構應用程序,我怎樣才能將這些圖層分開?

回答

3

Symfony2本身不是一個MVC框架,它只是一堆鬆散耦合的組件,它們很好地結合在一起。關於這個來自主要開發者的blog post

你可以選擇你的捆綁包有多好,例如你可以創建一個包含純域對象,業務邏輯和存儲庫接口,DAO的捆綁包。或者,您可以提供您選擇的ORM的映射配置。現在,您可以爲數據訪問策略創建捆綁包,比如一個捆綁使用doctrine的捆綁包,其他捆綁使用redis,實現您的存儲庫接口。

所以你可以爲細粒度的捆綁結構而瘋狂,但對於簡單的應用程序,你可以將所有這些都放在/src之下,或者只是創建一個包含所有在那裏實現的數據訪問策略的包,然後在應用程序中選擇一個捆綁的配置。

學習其他包的方法也有助於熟悉最佳實踐,FOSCommentBundleFOSUserBundle可能是一個很好的開始。

+0

感謝您的理解,有助於理解一些事情。現在我不得不跳入sumfony2 – 2012-02-29 11:00:48

1

當然。訣竅是將你的數據層(即業務對象)包裝在服務中。您的應用程序(又名控制器)根據用戶輸入與這些服務進行交互,並將結果傳遞到表示層。

小心構建您的服務,您將能夠在不影響控制器或演示文稿的情況下更換數據庫層。