2009-04-27 6 views
1

Dans un passeport, il y a un champ: Prénom, et ce champ a une valeur John.Qu'est-ce qu'un "champ"? "Champ" vs "Valeur du champ"

J'affirme qu'il est correct de décrire la relation comme suit:

Champ Prénom:

  1. a un nom (Prénom).
  2. A un ensemble de valeurs valides (par exemple définies par regex [A-Za-z.] {}
  3. 1,30
  4. a une description (nom qui signifie d'abord dans le nom complet de la personne)

et passeport est un ensemble de paires (champ: valeur de champ), de telle sorte que:

    passeport
  • a un champ "Prénom"
  • passeport a une valeur pour le champ "Prénom"

point ici est qu'il est incorrect dire:
"Première valeur du nom est John";

La bonne façon (sur le plan conceptuel/académique) est-à-dire:
« passeport a une valeur « John » pour le champ « Nom » ».

En pratique, cela signifie (pseudo C#):

struct Passport { 
    Map<Field, object> fieldValues; 
} 

struct Field { 
    string Name; 
    string Description; 
    bool IsValidValue(object value); 
} 

Q: Est-ce sens? Des pensées?

+2

Une autre question stupide. – jjnguy

+0

Le passeport est constitué d'un certain nombre de champs? Pas vraiment un concept révolutionnaire. –

+0

Pourquoi releassez-vous le modèle de valeur d'attribut d'entité avec des mots différents? http: //en.wikipedia.org/wiki/Entity-Attribute-Value_model. Y a-t-il une raison pour changer la terminologie? –

Répondre

1

Ceci est assez subjectif et entièrement sensible au contexte, et semble être une chose idiote de nitpick plus. Correct ou pas, si je parle de "passeport" avec un collègue, je leur jetterais quelque chose s'ils me corrigeaient chaque fois que je disais "firstName is 'john" ", et me dit de dire comme "le champ prénom du passeport est" john "". Vous viendriez juste comme ennuyeux.

+1

Le point n'est pas de corriger quand on parle de, la question est comment doit-il être modélisé; c'est-à-dire "value = Passport [Field]" vs "value = Passport.Field.Value" –

+1

Vous auriez pu simplement demander cela. Votre question semble être une question de sémantique. – womp

-1

Non. Au moins dans OOP, il est de la responsabilité du domaine de conserver la valeur. Bien que l'objet est chargé de veiller à ce que la valeur est compatible avec les autres domaines ou les contraintes de l'objet, le réel « contenant de la valeur est le travail de terrain

En utilisant votre exemple.

champ Prénom:

  • A un nom (prénom).
  • a un type (int, string, object)
  • a une description (en option)
  • A une valeur

Et Passport est un ensemble champs:

  • Peut définir contraintes sur un domaine tel que défini par le modèle, assurant la valeur et dans son ensemble est valide
+1

Je dirais que dans le champ OOP basé sur la classe appartient à la classe et n'a pas de valeur. Il en est ainsi lorsque vous regardez la réflexion dans C# ou java - la classe a des champs, un champ a un type, un nom, etc. Et vous pouvez obtenir la valeur du champ à partir de l'objet. Vous déclarez le champ une fois, en classe. Vous avez beaucoup d'objets avec les mêmes champs mais des valeurs différentes. Dans votre cas, les champs de votre passeport et de mon passeport sont différents, car ils conservent des valeurs différentes, n'est-ce pas? Donc, quand le gouvernement décide que "Prénom" devrait être renommé "1er nom" - il y a un million d'objets à renommer. –

+0

Dans votre cas, deux passeports différents sont complètement différents, n'est-ce pas? Comme ils ont juste un ensemble de champs, ils n'ont rien en commun. Dans la question originale au moins, ils partagent les mêmes champs et ont des valeurs différentes pour eux. –

+0

Peut-être que j'aurais dû écrire un objet avec un ensemble de valeurs * fixe *. Ou je pourrais avoir confondu des objets et des classes (idiot moi). Je vais y réfléchir .. – Rik

0

état de l'objet Si vous allez modéliser une telle chose, alors vous pouvez jeter un oeil à l'API de réflexion Java ou C#. C'est assez similaire à ce que vous avez décrit. La classe a un ensemble de champs, le champ a un nom, un type et d'autres attributs, et non une valeur. Object est une instance de classe et vous pouvez demander à l'objet la valeur du champ spécifié. Différents objets de la même classe ont des valeurs pour les mêmes champs, donc vous pouvez dire qu'ils partagent des champs. Donc, si vous essayez de modéliser la POO basée sur les classes, vous avez probablement raison.

Cependant, ce n'est pas la seule façon de faire de la POO. Il y a une POO basée sur un prototype qui ressemble différemment, car il n'y a pas de classes, seulement des objets, donc les objets contiennent un champ avec des valeurs, donc il n'y a pas beaucoup de différence si vous dites que l'objet contient un champ.

Donc, la réponse à "Est-ce logique?" Je pense que c'est "oui" parce que la même chose est en réflexion et est largement utilisée. Si c'est juste ou faux - dépend de vos besoins.

UPD: en ce qui concerne "value = Passport [Champ]" vs "value = Passport.Field.Value" Je présenterai un autre passeport pour préciser/

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

suppose que les deux ont un passeport mêmes champs, cela a du sens. Avoir des passeports différents avec des champs différents peut avoir un sens, juste un autre.

0

Eh bien ... pas vraiment en C# voir Scott Bellware's answer to my question about C# not being Object Oriented (kinda).

dans le passeport C# est une classe il est donc logique de dire

  1. "Le passeport a une FirstName sur le terrain"
  2. Pour une instance particulière "valeur est John FirstName".

Ici, le premier paragraphe décrit la classe et le suivant l'objet. Dans un langage plus OO comme ruby ​​je pense que dire "passeport a une valeur" John "pour le champ" Prénom "" serait équivalent, vous venez de décrire deux objets - le prototype Passport, et l'instance de celui-ci dans la même phrase . Je commence à être assez confuse en moi-même. La question est bizarrement posée car il y aurait sans doute beaucoup plus à donner à un passeport qu'à ses champs, par exemple une identité ancienne et persistante.

Questions connexes