【问题标题】:Is there a standard term for a class that contains just data, no logic?对于只包含数据而不包含逻辑的类,是否有标准术语?
【发布时间】:2009-09-17 22:07:29
【问题描述】:

我正在寻找一种标准方式来与其他程序员交流,即类本质上只是一个数据容器。

以这个简单的User 类为例:

class User
{
    public string userName { get; set; }
    public string passPhrase { get; set; }
    public Role role { get; set; }
}

“该组件使用 User 类,它只是一个(在此处插入)类。”

我想说“数据模型”,但我认为这太宽泛了。描述为数据模型的类通常具有逻辑。

【问题讨论】:

    标签: class terminology


    【解决方案1】:

    有时这些被称为 DTO - 数据传输对象。

    【讨论】:

    • DTO 是为了跨层传输,这里不确定是不是这样。
    • 我听说它们被描述为模型或领域对象。例如,它们是为您的应用程序域建模的对象。
    【解决方案2】:

    POD - 普通旧数据

    【讨论】:

    • +1,但想知道如果它包含getter/setter方法是否仍然是POD
    【解决方案3】:

    怎么样:struct?

    【讨论】:

    • C# 中的结构指的是语义上与类不同的东西。见msdn.microsoft.com/en-us/library/ah19swz4(VS.71).aspx 在某种意义上是相似的,它只是一个保存数据的东西。
    • 结构也可以有方法。
    • @Rob:是的,我知道,但对我们 C-恐龙来说,这是对家的提醒 :-)
    【解决方案4】:

    在这种情况下,“值对象”比“数据传输对象”更精确。值对象只包含值;数据传输对象还应实现一种方法,用于将数据传输到自身或从其他实体传输到其他实体或从其他实体传输数据。 “Bean”也是一个公认的术语,尤其是在 Java 圈子中。

    【讨论】:

      【解决方案5】:

      POXO - 普通的旧 X 对象,其中 X 是您选择的语言。你的情况,看起来像 C#,所以这是一个 POCO:Plain Old C# Object。

      【讨论】:

      • 在 POXO 中也可能有逻辑。
      • 必须不同意那里。 POCO 常用的意思是Plain Old CLR Object,一个POCO 可能有方法。这意味着(尤其是对于与 O/RM 一起使用的持久对象)是该类不需要从指定的基类继承。
      【解决方案6】:

      在 Java 中,只有属性和每个属性的 getter/setter 的类称为 bean 或 POJO(Plain Old Java Object)

      【讨论】:

      • True J​​avaBeans 必须实现Serializable 并且有一个无参数的构造函数。 POJO 没有这些限制。
      【解决方案7】:

      数据传输对象通常称为 DTO。

      【讨论】:

        【解决方案8】:

        这不是标准的,但我经常将“Info”后缀附加到类名以表明该类只是用于存储和传输信息。因此,我会将您的 User 课程更改为 UserInfo。

        UserData 也可以使用,就像顶部的“不要向这该死的东西添加任何方法”评论一样。

        【讨论】:

          【解决方案9】:

          数据传输对象可能是正确的,具体取决于意图。它本质上是一个容器,但是“容器”是重载的,一般是指集合类型。

          值对象可以有行为,但是如果你有两个独立创建的具有相同字段值的值对象,并且它们可以被视为等价的(例如记录的身份无关紧要),你可以说你的have 是一个值对象。但通常值对象在不可变时是最好的。

          当设计中有大量数据传输对象时,该设计有时被贬义为贫血域模型。

          【讨论】:

            【解决方案10】:

            来自A Gentle Introduction to Haskell

            “这样的类型通常称为元组类型,因为它本质上只是其他类型的笛卡尔积。”

            【讨论】:

            • 元组通常是不可变的(无论如何在 Python 和 F# 中)。此外,它们实际上不像类那样严格的类型。只有每个元素的顺序和类型很重要。
            • 在示例中,名为 User 的类型是其他三种类型的笛卡尔积:字符串、字符串和角色。笛卡尔积的元素总是元组(在这种情况下是三元组)。因此,该类型被称为“元组类型”。许多语言(F#、Python 等)也支持使用元组,但不应与此处使用的术语“元组类型”混淆。
            • 我能理解你的意思,但是函数式语言中元组类型的语义通常意味着它是不可变的;所描述类型中的 getter/setter 意味着存在行为,即使它相当小。元组类型通常没有自己的行为,尤其是允许您更改对象状态的行为。
            【解决方案11】:

            数据对象、数据传输对象、DTO

            【讨论】:

              猜你喜欢
              • 2010-10-10
              • 1970-01-01
              • 1970-01-01
              • 2022-01-15
              • 2018-04-23
              • 2015-08-22
              • 2017-09-05
              • 1970-01-01
              • 2012-09-28
              相关资源
              最近更新 更多