在护照中有一个字段:名字,该字段的值为 John 。
我断言如下描述这种关系是正确的:
字段名字:
Passport 是一组对(字段:字段值),例如:
这里指的是不正确来说:
“名字价值是约翰”;
正确方式(概念上/学术上)是说:
“护照对''名字''有一个'约翰'的价值。”
实际上它意味着(伪C#):
struct Passport {
Map<Field, object> fieldValues;
}
struct Field {
string Name;
string Description;
bool IsValidValue(object value);
}
问:这有意义吗?有什么想法吗?
答案 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#中,护照是一个类,所以说
是完全合理的这里第一个子句描述了类和下一个对象。在像ruby这样的OO语言中,我认为“护照对于字段'名字'具有价值'John'”是相同的,你只是描述两个对象 - Passport原型,并在同一个句子中使用它的实例
我自己也很困惑。这个问题是奇怪的措辞,因为无疑对护照的要求远远超过其领域,例如长期坚持的身份。
答案 3 :(得分:-1)
没有。至少在OOP中,保留价值是该领域的责任。虽然对象负责确保值与其他字段或对象的约束一致,但实际的“包含值是字段的作业。
使用您的示例:
字段名:
Passport 是一组字段: