2011-09-29 67 views
2

我已經在我的項目如下結構:DDD在哪裏保存用戶生成的文件?

UI - >應用程序 - >域 - >基礎設施(4層)

我需要允許用戶上傳圖片,在更好的地方保留用戶生成的文件?在UI項目中的文件夾中?

更新:

這裏是我的文件夾結構:

enter image description here

感謝的答案,但我想也知道在哪裏保存的物理文件。

更新2:

我的應用程序是一個CMS和這些圖像是由用戶生成的內容。

回答

3

讓基礎架構處理這些細節。如果需要有任何形式的驗證或業務規則,那麼就像處理常規數據一樣處理它,因爲就是這樣。唯一的區別是你可能將這些數據保存在不同的地方,但這是一個實現細節。

稍後,您可能希望將這些文件存儲在數據庫或版本控制中......仍然可以將實現細節抽象到基礎架構層中。

更新:好的,在哪裏物理保存文件的驅動器。 如果是我,不會將它們與我的代碼混合存儲,因爲它看起來可能會很快變得複雜。 假設您想要開始將這些文件存儲在版本控制中,現在您將一個版本控制系統中的代碼與另一個版本控制系統中的數據在同一個位置混合。我可能會選擇一個地方至少有一點,從您的代碼中分離出來:

兩個想法:

Venus.Application 
Venus.Domain 
Venus.Infra 
Venus.Tests 
Venus.UI.Web 
Venus.Files (or Data) 

或者

Venus.Application 
Venus.Domain 
Venus.Infra 
    \Files (or Data) 
Venus.Tests 
Venus.UI.Web 

我沒有做這樣的事情上傳用戶的XML文件,我did將文件保存在類似第二個文件夾的文件夾中,然後我確定這些文件最好存儲在數據庫中,因爲文本只有在需要導出時才寫出。

+0

請參閱更新請求... –

1

我認爲這取決於正在上傳的圖像文件的字符。他們的預期用途是什麼,他們需要存儲多長時間。對於不需要很長時間的短期圖像,TEMP對他們來說是一個絕佳的位置。

如果它們是長期/永久性文件,那麼您需要考慮它們如何適合您的域模型。如果您的域名主要圍繞用戶圖片開展工作,那麼他們也許應該在您的域名文件夾中佔據一席之地(請記住,您不能忘記將用戶上傳的文件複製到無法公開訪問的位置網絡服務器,但我假設你正在照顧)。

但是,如果這些圖像對於域不那麼重要,並且可能它們被用來美化/定製用戶的網絡體驗,那麼它們可能屬於UI文件夾中的某個地方。

DDD是關於設計一個解決方案,儘可能模擬問題域;你應該最好地瞭解你的域名,用你最好的判斷力。

+0

的確如此,您希望將其與您的域密切建模,這很好。我只是額外強調,你讓基礎設施處理這些細節,無論你決定哪裏是最好的地方來存儲它。 – Steve

+0

@丹尼我的應用程序是一個CMS,這些圖像是由用戶生成的內容。在哪裏保存? –

+0

假設一個CMS,其中的圖像是與CMS域相關的用戶生成內容,那麼Domain下的UserContent文件夾可能是合適的...... –

0

就實際存儲它們的位置而言,我會親自將它們存儲在數據庫中,方法是將它們作爲二進制數據存儲在數據庫提供的二進制數據類型之一中。

您可以簡單地在對象/ DTO上擁有一個Image屬性,並在保存時將其轉換爲字節。

根據我的經驗,保留數據庫中的所有用戶數據而不是使用物理文件更加麻煩,因爲您不必擔心獨特的文件名,權限以及移動服務器/部署等,因爲它包含所有內容在數據庫中,您可以輕鬆備份和移動。