我努力在.net解決方案中使用DDD實現一項要求。我會盡量減少細節:如何實現DDD存儲庫來處理具有多個實體的查詢?
實體:
- 類別(UID,名稱)
- 屬性(UID,名稱,AttributeValues [])
- 的AttributeValue(UID,名稱,ParentAttributeUId )
- 過程(UID,名稱,AttributeValues [],分類[])
數據模型:
- 每個進程可以有多個類別(例如, ProcessCategoryMap表)
- 每個過程可以有多個AttributeValues(例如ProcessAttributeValue表)
- 類別之間沒有關係,屬性,attributeValues
我有S.P. FetchByCategoryAndAttributeValues(類別ID,AttributeValueIds []) 返回一個數據集:
- 匹配類別ID過程的列表中,而且可用AttributeValueIds細化搜索AttributeValues的
- 列表。
如何實現存儲庫加上調用SP的方法,當返回多個實體時,在我看來,返回的對象是一個值對象,它似乎不在現有實體存儲庫中引用?
什麼想法?
問候,
佩德羅
====編輯:2011/03/30下午2時52 UTC ====
我更新我的問題,珍惜所有的意見加上幫助其他人面臨類似的挑戰。
@Justice:
解決方案:使用ORM例如NHibernate加上使用ORM的所有理由
我不記得任何在Eric Evans ddd書中提到的ORM。具體的持久性技術如何選擇呢?一旦你清理了域名,你就可以隨心所欲地堅持下去。 Offcourse我知道NH可以提供幫助並且是強大的工具,但它本身不是解決方案。
@Dominic/@Justice:
解決方案:從存儲過程的移開。
首先,對於我來說很難證明當我看到好的T-SQL存儲過程時,我不是在談論CRUD或簡單的T-SQL查詢。我提到的SP運行幾個TSQL CTE,結合不同表中的度量數據來計算權重,使用臨時表並返回客觀結果:進程列表,類別列表,屬性值列表。對SP進行優化和調整爲特定的SQL數據庫/服務器可能是一個MSFT,Oracle等我不相信那些轉移到計算應用端,然後在ORM依賴將有助於執行時間加上所有回並轉發查詢。對於我來說,在服務器中完成所有這些工作並僅引入過濾數據有很大的區別。我可能是錯的。
@All: 我已經確定了真正的問題(如Domenic指出了與ayende鏈接)我正在將一種基於數據中心方法的解決方案移植到域模型方法中。讓我們把它放回去,由SP返回的計算會影響不同的模型。由於數據在數據庫中的存在方式,常見的計算和計算在實體之間是有界的,所以問題在於如何實現DDD實現時如何獲得最佳效果。以及如何保持數據庫管理員的工作:)
您可以創建一個非常好的域模型,堅持數據跨越N個不同的表,問題是當您查詢該數據如何使模型,並保持DDD處於良好的立場。
謝謝大家,我還在尋找創意,答案等:)
問候, 佩德羅
剛剛看到您的更新。是的,保持DBA的工作是我們在最後一個地方努力奮鬥的事情:P – Domenic 2011-04-17 05:42:39