Question

Je suis en train d’écrire une application financière et nous avons un tableau client assez standard. Il comprend de nombreux champs obligatoires, dont certains facultatifs, tels que Cellule / Fax, etc. J'utilise NHibernate comme ORM et toutes les correspondances sont correctes. Cela fonctionne déjà.

Je me demande simplement comment puis-je "exprimer" " dans le code qu'un champ n'est pas nul sans commenter? J'ai les fichiers hbm.xml qui documentent ceci, mais c'est un peu gênant de les regarder pour des choses comme ça.

L’autre chose qui me vient à l’esprit est que je ne veux pas que le référentiel jette Exceptions NHibernate dans ma logique, alors je devrais peut-être choisir la voie de validation dans le contrôleur. Cependant, comment puis-je faire en sorte que le code POCO indique que certains champs peuvent être nuls?

Diagramme de classes

Comme vous pouvez le constater, je souhaite que les options Cellulaire et Télécopie soient facultatives, tandis que Téléphone est obligatoire. Ce ne sont que des mappages composites. Le fichier de mappage spécifie simplement que les éléments individuels de chacun doivent être non null, mais je n'aime pas faire la vérification Person.Cellular! = Null tout le temps pour éviter d'avoir une exception NullReferenceException.

Était-ce utile?

La solution

Il existe plusieurs façons de procéder, en fonction de votre comportement et de votre style de codage POCO. Tout d'abord, vous pouvez utiliser des types nullables pour indiquer que ce champ est nullable et il serait donc implicite que les autres ne sont pas nullables. Vous pouvez également introduire un type de valeur Phone comme type pour la propriété Phone du POCO que vous avez illustré, ce qui implique que, comme il ne s'agit pas d'un type primitif, il est "plus important". - Cela vous permettrait également d’encapsuler la validation du numéro de téléphone au sein même de la classe.

Pour moi, pour être un véritable objet POCO, il n’est pas nécessaire de s’inquiéter de la nullité sous-jacente dans la table de base de données dans laquelle il est persit. ; ainsi, avant d’arriver à NHibernate, il est déjà dans un état valide.

Autres conseils

Faites en lecture seule les propriétés notnull et écrivez-leur via un constructeur public. Définissez le constructeur par défaut protégé ou privé.

public class DomainObject{
private string nnp;
protected DomainObject(){}
public DomainObject(string nnp){
this.nnp = nnp;
}
public string NotNullProp {get {return nnp;}}
public string NullableProp {get;set;} 
}
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top