簡體   English   中英

復雜的對象設計:不必檢索整個對象圖

[英]Complex objects design: so as to not have to retrieve the entire object graph

不知道這個問題的最佳標題是什么,或者即使我很清楚,也不確定,但是這里是:

設置復雜對象的最佳方法是什么,以便在首次訪問父對象時不必檢索整個對象圖?

例如:訂購

  • 有一個顧客

  • 訂單行(許多)

    • 產品

      • 價錢
    • 定價明細(折扣等)

    • 訂單狀態

  • 狀態

  • 履行日期

您是否將其所有相關對象作為屬性創建Order或為相關對象提供訪問器方法?

例:

選項1:

班級順序

  • 公共財產客戶

  • 公共財產訂單行列表

選項2:

班級順序

- public GetCustomer():Customer

- public GetOrderLines():List of order lines

我的看法各有各的優點和缺點:

選項1:類圖顯示不同對象之間的關系。 缺點是,在獲取Order對象時,需要獲取整個對象圖(這可能會變得很昂貴,在許多情況下可能是不必要的)。

選項2:因為每個對象都是通過Get調用檢索的,所以可以將實際檢索推遲到需要該對象時。 缺點,至少在Visual Studio類圖中,您不能再在不同對象之間獲得良好的關系。

還有其他設計模式可以更有效地完成我正在嘗試的工作嗎?

您是否考慮使用諸如實體框架或NHibernate之類的ORM? 這樣,您將獲得“ 延遲加載”支持,而無需自己實施麻煩。

“ Property vs. getter”方法和“ lazy loading”與“ full object graph”的選擇是正交的,您幾乎可以將它們任意組合。

我可能會在這里選擇一個屬性,因為它對於C#來說更慣用了。 至於延遲對象檢索,則取決於您的上下文-就像anon所寫的一樣,從數據庫數據進行繪制時,延遲加載可能會很明顯。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM