2011-12-07 77 views
8

我有確切的問題,這傢伙有:http://groups.google.com/group/symfony2/browse_thread/thread/cd35132cc6972f29你如何組織你的包在Symfony2的項目?

我就在這裏複製粘貼:

我想組織一個 項目內的人捆綁不同的方式使用的是什麼。

我似乎最終會得到一個項目的大規模捆綁或捆綁的很多 ,這些捆綁彼此密切相關。例如;

我實現我自己的用戶實體和登錄表單等,但用戶 鏈接到一個組織(有一些功能)。等......這是 主要是我認爲重疊很多的實體...

你們把他們拆分或轉儲他們在同一捆?

+1

這似乎可能導致成爲「討論問題」。此外,在沒有問題的具體例子的情況下,許多答案同樣有效。實體的不同組合可能會改變答案,例如:'User'和'Organisation'(假設系統內還存在其他組織的依賴關係) - 不同的捆綁包。 'BlogPost'和'BlogPostRevision' - 同一個包。它基於系統設計的部分直覺 - 一個捆綁包應該只是封裝一些你認爲具有內聚性的功能。 – Kasheen

回答

6

對於每個項目,我從一個CoreBundle開始,將所有內容放在一起。然後,我只是在開發它的特點和隨着時間的推移我重新評估它 - 如果我可以使用此功能在其他地方有一天(甚至發佈到開源),我把它移動到一個新包。

特徵的「大小」值得單獨的包其實並不重要 - 我見過大如1個單一的js文件操作系統軟件包:d

有一兩件事是肯定的 - 在一個單一的包餡一切是不好的,這完全違背了爲什麼這個架構首先被實現的原因!

+0

我也開始使用CoreBundle,除非項目不大,否則我們不需要創建這麼多的包... :) +1 – ianaz

0

我以下主題中的答案也許可以幫助你:Symfony 2 : Location of Entities

我不是高手Symfony2的,但我想我有捆綁設計的相當不錯的主意;當然,沒有普遍的答案,但你可以遵循一些「最佳實踐」。

首先,我不認爲大包是一個很好的解決方案;您不會再將您的項目分解爲應用程序,就像您使用Symfony1.4一樣。你可能會問「但是我能用前端/後端邏輯做些什麼?」 ;很簡單,使用控制器!

每個包應該引用一個模塊,在您的項目的牆上的一塊石頭。你必須劃分你的應用程序;許多捆綁都不錯。當然,不要爲每個實體做一個捆綁,這會浪費時間。但想象一個博客應用程序:您將擁有一個用戶包,文章包(它將管理帖子,類別......),最終是靜態頁面的包,...

您的包已鏈接;你正在構建一個完整的應用程序,所以在這種情況下它們被鏈接。但這裏的關鍵詞是「泛化」;你的捆綁應該能夠鏈接到其他捆綁,而不僅僅是你的捆綁。您應該能夠在其他項目中重新使用它。

祝你好運!

15

編輯I don't use bundles for app-specific code anymore


就我個人而言,我更喜歡爲應用程序的每個部分提供一個包。例如:

  • UserBundle
  • BlogBu​​ndle
  • ForumBundle
  • JobBundle
  • StoreBundle

這是正常的,如果應用程序是幾個功能的混雜,沒有其中的大小足以需要單獨的應用程序和/或子域。但是,如果我是開發一個大的網絡商店的一個應用,我的包會更具體:

  • UserBundle
  • ProductBundle
  • CartBundle
  • SearchBundle
  • WishlistBundle

所以,我想說,這取決於項目的重點。對於一個項目來說,只是一個部分可能是另一個項目的核心功能。

而且我平時也CommonBundle,所有的東西共同去,像全局CSS,圖像,佈局等

而且至少有兩個選擇後端組織:

  1. 每個包都有自己的後端部分,或者
  2. 有一個大的後端包。

我個人的偏向第一個選項,你可以在我的previous answer讀到它,但還有誰願意讓整個後端的獨立包的人 - 可能使用admin bundles之一。

順便說一下,捆綁互聯是完全可以的 - 你不必讓它們彼此獨立。例如,JMSDiExtraBundle取決於metadata庫和JMSAopBundle,而這依次取決於cg-library。如果你試圖保持捆綁完全獨立,那麼最​​終你會得到巨大的單一代碼塊。

+0

非常感謝您的解釋! –