【问题标题】:What is the difference between the shape and structure of an object?物体的形状和结构有什么区别?
【发布时间】:2009-05-17 21:05:26
【问题描述】:

我看到它在数据上下文中被大量使用。来自 ScottGu 的post

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

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

【问题讨论】:

  • 我不这么认为!你能举一个更详细的例子来说明你的意思吗?
  • @Neil:添加了一些上下文。希望这会让它更清楚
  • 谢谢,我知道知情人士理解它,我只是从一个无知的菜鸟的角度来看它 - 即我! :-)

标签: oop language-agnostic


【解决方案1】:

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

因此,您可以拥有具有良好“形状”但结构像皱纹纸的类。这可能比其他方式更容易重构:形状差,但实现好。 (我敢肯定有些人会质疑后者是否可能。)

【讨论】:

    【解决方案2】:

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

    【讨论】:

      【解决方案3】:

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

      【讨论】:

        【解决方案4】:

        一般来说,我会认为一个类的 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
                                  };
        

        【讨论】:

          猜你喜欢
          • 2015-10-23
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2020-11-16
          相关资源
          最近更新 更多