物体的形状和结构有什么区别?

时间:2009-05-17 21:05:26

标签: oop language-agnostic

我看到它在数据上下文中使用了很多。来自ScottGu的post

  

真正强大的一个   LINQ和。提供的功能   查询语法是您的能力   定义单独的新类   从被查询的数据,到   然后用它们来控制形状和   返回的数据结构   通过查询。

当他提到数据的形状时,他的意思是什么?

4 个答案:

答案 0 :(得分:3)

我认为这些是非正式术语,定义是主观的。我会使用“形状”来指代对象如何适应系统中的其他对象。 (比较“表面区域”,这是对象界面复杂性的粗略(没有双关语:-)衡量。)我使用“结构”来指代对象在内部的设计和实现方式。

因此,你可以拥有一个具有良好“形状”的类,但是像绉纸这样的结构。这可能比其他方式更容易重构:形状不佳,但实施良好。 (我确信有些人会质疑后者是否可能。)

答案 1 :(得分:1)

形状是对象的任何空间属性(特别是由轮廓定义),而结构是对象的构造方式和其部分的布置。当然,这可以适用于任何类型的对象。 :)

答案 2 :(得分:1)

将shape视为对象“api”,而结构是它的内部实现。在设计良好的系统中,形状将保持静止,而结构可能会发生显着变化。

答案 3 :(得分:1)

通常,我会认为类的 shape 是该类提供的公共方法和属性。结构将是内部构造和使用的表示。在引用的材料的上下文中,我认为通过允许使用匿名或备用命名类来定义查询的返回类型,您可以重新定义查询返回的数据,从原始约束和转换其形状数据来源。

例如,假设您有一个与联系人表相关的用户表。使用LINQ和匿名类作为选择,您可以返回具有主要联系对象的用户,而无需定义特定视图;仅使用LINQ。

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