2014-03-12 28 views
1

鑑於在一個項目的根以下目錄:這被認爲是濫用作曲家嗎?

  • 應用程序/,靜態資源和類映射項目代碼
  • SRC /,配置成加載命名空間PHP代碼
  • 供應商/的組合,包裝用composer.json管理無論我發生什麼框架內使用

,這將是正確的利用src目錄意圖是該項目的可用外移植的代碼,或者是THA t vendor目錄的作用是什麼?

對於要共享的代碼使用src目錄可能會產生任何問題嗎?

回答

1

這似乎是一個合理的設計方法。 Composer允許您將自己的類自動加載到目錄中,然後在composer.json中引用它。看到這個問題如何:Using Composer's Autoload

但是,這不會處理您的代碼在src /下的版本控制。如果你要單獨發佈此,一旦你到一個Git回購檢查它的地方,它可能是值得學習how to make your library installable through Composer和,像這樣引用它:

"require": { 
    "me/testlib": "1.0.*" 
} 
"repositories": [ 
    { 
     "type": "vcs", 
     "url": "https://github.com/username/hello-world" 
    } 
] 

當然,那麼您會發現maintanining多源樹,一個用於你的項目,另一個用於每個圖書館,但這是件好事? (「關注點分離」)。

+0

因此,儘管目錄結構本身很好,但您不會建議將代碼置於'vendors'以外的地方嗎? –

+0

'供應商/'是作曲家安裝的東西。不要把你自己的東西放在那裏,除非你根據我的建議通過作曲家從回購中獲得它。我不確定我是否理解你的問題,但我認爲一個恰當的答案是「我建議不要將自己的庫與你的程序放在同一個源代碼樹中」。 –

+0

是的,我的意思是「將代碼放在供應商中」將是「編寫一個包」的代名詞。而且你建議'src /'目錄仍然是項目級別,並且是整個解決方案的特定對象:開發人員不打算手動複製項目之間的整個目錄以重用代碼,而是應該爲'供應商/'? –

0

在一般情況下,您的方法看起來像是有效的方法。

但是,如果數據量爲app或其他任何地方超過src中可用代碼的數量,它將會失效。換句話說:如果你只在src中主持一個共享類,並且app中有一個千兆字節的資源不需要該類,那麼將其作爲一個庫是愚蠢的。

但是在這種情況下,只需簡單地將該類自己移入作曲程序庫並再次包含它即可。由於自動加載,類仍然存在(儘管該文件改變了它的位置)並且可用於其他代碼。任何其他需要大量資產的軟件,即使該課程被移動,也將繼續工作。

將代碼移入庫中時,可能值得考慮的是通常較小通常較好,但太小則毫無價值。你不希望require它自己的每一個類 - 但一個合理的集合類具有相同的主題,是一個很好的候選人。

+0

而src /目錄顯然不是正確的放置代碼的地方,可以跨頁使用,對嗎? –

+0

你可以把代碼放在任何你喜歡的地方,實際上'src'是許多庫的常用選擇,連同它旁邊的'tests'。我不明白爲什麼這應該是壞 - 我自己使用它。 – Sven

+0

這似乎是作爲作曲家指定供應商/作爲管理外部依賴關係的目錄的濫用。任何其他目錄應該是項目特定的。 –