2009-05-17 620 views
0

我看到它在數據上下文中使用了很多。從ScottGu的post物體的形狀和結構有什麼區別?

一個由LINQ和 查詢語法提供的真正強大 能力是你定義一個新的類是獨立 從數據正在查詢的能力 ,並 然後用它們通過查詢來控制返回數據的形狀和 結構 。

他指的是什麼數據的形狀?

+6

我不這麼認爲!你能舉一個更詳細的例子嗎? – 2009-05-17 21:06:41

回答

1

認爲形狀是對象「api」,而結構是內部實現。在設計良好的系統中,形狀將保持不變,而結構可能會發生顯着變化。

1

形狀是對象的任何空間屬性(特別是如輪廓所定義的),而結構是對象的構造方式和其部分的排列方式。當然,這可以適用於任何類型的對象。 :)

3

我認爲這些是非正式的術語,而且定義是主觀的。我將使用「形狀」來指代對象如何與系統中的其他對象配合。 (比較「表面區域」,這是一個粗糙的(沒有雙關語意圖:-)衡量對象界面的複雜性。)我會用「結構」來指代對象是如何在內部設計和實現的。

因此,你可以有一個良好的「形狀」,但像縐紙結構的類。這可能比其他方式更容易重構:形狀不佳,但實現良好。 (我敢肯定有些人會質疑後者是否可能。)

1

通常,我會認爲一個類的形狀是該類提供的公共方法和屬性。該結構將是內部結構和表示形式的使用。在引用材料的上下文中,我認爲通過允許使用匿名或備用命名類定義查詢的返回類型,您可以重新定義查詢返回的數據,約束和轉換其原始形狀數據源。

例如,假設您有一個與聯繫人表相關的用戶表。使用LINQ和匿名類作爲選擇,您可以返回具有主要聯繫人對象的用戶,而無需定義特定的視圖;只使用LINQ。

var userWithContact = from u in db.Users 
         select new 
          { 
          Name = u.Name, 
          Address = u.Contacts 
             .Where(c => c.Type = "self").First().Address 
          };