什么是“领域”? “场”与“场地价值”

时间:2009-04-27 20:26:06

标签: oop

在护照中有一个字段:名字,该字段的值为 John

我断言如下描述这种关系是正确的:

字段名字

  1. 有名字(名字)。
  2. 有一组有效值(例如由正则表达式定义[A-Za-z。] {1,30}
  3. 有描述(姓名首先代表该人的全名)
  4. Passport 是一组对(字段:字段值),例如:

    • 护照有一个字段“名字”
    • 护照 字段“名字”的

    这里指的是不正确来说:
    “名字价值是约翰”;

    正确方式(概念上/学术上)是说:
    “护照对''名字''有一个'约翰'的价值。”

    实际上它意味着(伪C#):

    struct Passport {
        Map<Field, object> fieldValues;
    }
    
    struct Field {
        string Name;
        string Description; 
        bool IsValidValue(object value);
    }
    

    问:这有意义吗?有什么想法吗?

4 个答案:

答案 0 :(得分:1)

这是非常主观的,完全是上下文敏感的,并且看起来像是一个愚蠢的东西。

正确与否,如果我和同事讨论“护照”,如果我每次说“firstName is'john”时纠正我,我会向他们扔些东西,并告诉我说出来因为“护照的名字字段是'约翰'”。你只是觉得很讨厌。

答案 1 :(得分:0)

如果你打算对这样的东西进行建模,那么你可以看一下java或c#的反射API。它与你描述的非常相似。类具有字段集,字段具有名称,类型和其他属性,而不是值。 Object是类的实例,您可以向object询问指定字段的值。同一类的不同对象具有相同字段的值,因此您可以说它们共享字段。因此,如果您正在尝试为基于类的OOP建模,那么您可能是对的。

然而,这不是进行OOP的唯一方法。有一个基于原型的OOP看起来不同,因为没有类,只有对象,所以对象包含带有值的字段,所以如果你说对象包含字段并且字段有值,则没有太大区别。

所以回答“这有意义吗?”我认为是“是”,因为类似的东西在反思中被广泛使用。如果是对或错 - 取决于您的需求。

UPD:关于“value = Passport [Field]”vs“value = Passport.Field.Value” 我会再介绍一本护照,以便明确/

firstNameField = PassportClass.Fields["FirstName"]
myName   =   myPassport[firstNameField]
yourName = yourPassport[firstNameField]

假设两本护照都有相同的字段,这是有道理的。拥有不同领域的不同护照可能有一种感觉,只是另一种感觉。

答案 2 :(得分:0)

嗯..不是真的在c#中看到Scott Bellware's answer to my question about C# not being Object Oriented (kinda)

在C#中,护照是一个类,所以说

是完全合理的
  1. “Passport有一个字段FirstName”
  2. 对于特定实例“FirstName值为John”。
  3. 这里第一个子句描述了类和下一个对象。在像ruby这样的OO语言中,我认为“护照对于字段'名字'具有价值'John'”是相同的,你只是描述两个对象 - Passport原型,并在同一个句子中使用它的实例

    我自己也很困惑。这个问题是奇怪的措辞,因为无疑对护照的要求远远超过其领域,例如长期坚持的身份。

答案 3 :(得分:-1)

没有。至少在OOP中,保留价值是该领域的责任。虽然对象负责确保值与其他字段或对象的约束一致,但实际的“包含值是字段的作业。

使用您的示例:

字段名:

  • 有一个名字(名字)。
  • 具有类型(int,string,object)
  • 有描述(可选)

Passport 是一组字段

  • 可以在模型定义的字段上定义约束,确保值和对象的状态整体有效