Code dérivé des associations


Cet article va vous montrer comment utiliser un code dérivé des associations pour mettre en œuvre définies par l'utilisateur contraintes de classe.

Code dérivé de l'association est dérivé de l'association sans condition Dérivée expression OCL - la logique doit être mis en œuvre dans votre code.

Merci de lire Malcolm Bosquets' articles si vous n'êtes pas sûr de ce dérivé de l'association est.

Ces deux articles sont les plus pertinentes pour le sujet:
ECO : Dérivée des Associations
ECO : Dérivée des Attributs de la Partie 2 - Code Dérivé Attributs

Problème:
Souvent, les utilisateurs nous demandent si nous pouvons faire l'un ou l'autre domaine de notre système obligatoire.
Ils aimeraient avoir plus de champs obligatoires ou certaines données règles de validation pour atteindre une meilleure qualité de l'information stockée.

la Solution:
Exemple de projet utilisé dans cet article va vous montrer comment mettre en œuvre la coutume, classe définie par l'utilisateur des contraintes de la classe Personne.

l'Utilisateur peut créer ses propres règles de validation de données et le système va vérifier les règles sur les objets dans la base de données à chaque fois que l'utilisateur crée/accède à des objets ou à des modifications des attributs d'un objet.

Ceci est différent de la définition au moment de la conception contraintes de classe, qui est fourni par l'ÉCO-cadre, que l'utilisateur sera en mesure de définir ses propres contraintes de classe au moment de l'exécution, de les stocker dans la base de données et de les utiliser dans l'ensemble du système.

Dans mon application j'ai créé 2 classes Personne et PersonConstraint.

Personne de la Classe représente Personne et de ses attributs et de classe PersonConstraint stocke tous définis par l'utilisateur des contraintes des règles pour objet de Personne.

PersonConstraint classe a attributs de la chaîne de OCLExpression et ErrorMessage.

l'Attribut OCLExpression contient expression OCL être évalués en fonction de la Personne sélectionnée objet.
l'Attribut ErrorMessage contient une chaîne de caractères à afficher dans l'interface graphique s'contrainte/règle de validation a échoué.

j'ai Également créé un dérivé de l'association entre la Personne et la PersonConstraint.
l'Association fin BrokenConstraints retourne tous violé les contraintes pour objet de Personne.

Parce que je n'ai pas spécifié de Dérivés OCL pour l'association, j'ai besoin de fournir de la mise en œuvre de la dérivée de l'association dans mon code.

Pour l'association fin BrokenConstraints j'ai créé une fonction déclarée comme ceci:

public IList BrokenConstraintsDeriveAndSubscribe(ISubscriber reEvaluateSubscriber, ISubscriber reSubscribeSubcriber)
{
...
}

l'Association a multiplicité n et la fonction doit retourner IList.

Les autres détails de sa déclaration sont similaires à code attribut dérivé de la fonction (voir Malcolm Bosquets Blogs).

Dans ma fonction:

  • j'ai créer un nouvel objet la mise en œuvre de IList (par exemple, objet ArrayList),
  • Aller à travers tous les PersonConstrain objets,
  • Évaluer chaque OCLExpression sur la Personne de l'objet,
  • Si la validation échoue, j'ajoute PersonConstraint objet de la liste,
  • de Retour de la liste des résultats

ECO utilise cette fonction pour obtenir BrokenConstraints association fin.

Si la fonction renvoie IList, ÉCO-cadre se transforme suite à IPersonConstraintList (ce qui est fait par carte de classe dans le cadre).

Pour réévaluer BrokenConstraints pour chaque objet, à chaque fois que l'objet est mise à jour, je vous abonner sur la Personne objet de modifications à l'aide de reEvaluateSubscriber et reSubscribeSubcriber comme ceci:

os.EvaluateAndSubscribe(ce.AsIObject(), c.OCLExpression, reEvaluateSubscriber, reSubscribeSubcriber)

une Autre chose (merci à Jan Viseur de l'aide) est de s'inscrire sur PersonConstraints' expressions OCL modifications:

os.EvaluateAndSubscribe(null, 'PersonConstraint.allInstances.OCLExpression', reEvaluateSubscriber, reSubscribeSubcriber)

Cet abonnement forces toutes les OCLExpressions être réévaluée pour tous les objets de la Personne lorsque de nouvelles PersonConstraint est ajouté.

C'est comment mon code dérivé de l'association fonction ressemble à:
public IList BrokenConstraintsDeriveAndSubscribe(ISubscriber reEvaluateSubscriber,
ISubscriber reSubscribeSubcriber)
{
ArrayList brokenConstraints = new ArrayList()
IObjectList contraintes = null
IOclService os =
(IOclService)AsIObject().Fournisseur de services.GetEcoService(
typeof(IOclService))
IElement e = null
objet OCLResult = null

//Récupère toutes les contraintes
e = os.EvaluateAndSubscribe(null,
'PersonConstraint.allInstances', null, null)
si (e est IObjectList)
contraintes = (IObjectList)e

//abonnez-vous sur tous les OCLExpressions
système d'exploitation.EvaluateAndSubscribe(null,
'PersonConstraint.allInstances.OCLExpression',
reEvaluateSubscriber, reSubscribeSubcriber)

//aller à travers toutes les contraintes et évaluer des expressions sur l'objet
for (int i = 0 i < contraintes.Le comte i )
{
PersonConstraint c = contraintes[i].AsObject comme PersonConstraint

si (c.OCLExpression =='')
continuer

e = os.EvaluateAndSubscribe(ce.AsIObject(), c.OCLExpression,
reEvaluateSubscriber, reSubscribeSubcriber)
if (e != null)
OCLResult = e.AsObject

//Ajouter à la liste si la contrainte est cassé
if (!Convertir des.ToBoolean(OCLResult))
brokenConstraints.Ajouter(c)
}

de retour brokenConstraints
}

Et c'est ma demande:

Maintenant, je peux créer mes propres contraintes de classe/les règles de la saisie des expressions OCL et les messages d'Erreur.

Chaque fois que je accéder Personne de l'objet ou modification de ses attributs, le programme évalue ces expressions OCL et affiche une liste de Messages d'Erreur pour la Personne sélectionnée objet.
Si j'ajoute plus de règles, ils obtiennent validé sur la Personne sélectionnée objet.

dès Que la Personne sélectionnée, l'objet est conforme à mon habitude contraintes de classe, les messages d'Erreur disparaît.

le code Source peut être téléchargé à partir d'ici.









Code derive des associations


Code derive des associations : Plusieurs milliers de conseils pour vous faciliter la vie.


Cet article va vous montrer comment utiliser un code derive des associations pour mettre en œuvre definies par l'utilisateur contraintes de classe.

Code derive de l'association est derive de l'association sans condition Derivee expression OCL - la logique doit etre mis en œuvre dans votre code.

Merci de lire Malcolm Bosquets' articles si vous n'etes pas sûr de ce derive de l'association est.

Ces deux articles sont les plus pertinentes pour le sujet:
ECO : Derivee des Associations
ECO : Derivee des Attributs de la Partie 2 - Code Derive Attributs

Probleme:
Souvent, les utilisateurs nous demandent si nous pouvons faire l'un ou l'autre domaine de notre systeme obligatoire.
Ils aimeraient avoir plus de champs obligatoires ou certaines donnees regles de validation pour atteindre une meilleure qualite de l'information stockee.

la Solution:
Exemple de projet utilise dans cet article va vous montrer comment mettre en œuvre la coutume, classe definie par l'utilisateur des contraintes de la classe Personne.

l'Utilisateur peut creer ses propres regles de validation de donnees et le systeme va verifier les regles sur les objets dans la base de donnees a chaque fois que l'utilisateur cree/accede a des objets ou a des modifications des attributs d'un objet.

Ceci est different de la definition au moment de la conception contraintes de classe, qui est fourni par l'ECO-cadre, que l'utilisateur sera en mesure de definir ses propres contraintes de classe au moment de l'execution, de les stocker dans la base de donnees et de les utiliser dans l'ensemble du systeme.

Dans mon application j'ai cree 2 classes Personne et PersonConstraint.

Personne de la Classe represente Personne et de ses attributs et de classe PersonConstraint stocke tous definis par l'utilisateur des contraintes des regles pour objet de Personne.

PersonConstraint classe a attributs de la chaîne de OCLExpression et ErrorMessage.

l'Attribut OCLExpression contient expression OCL etre evalues en fonction de la Personne selectionnee objet.
l'Attribut ErrorMessage contient une chaîne de caracteres a afficher dans l'interface graphique s'contrainte/regle de validation a echoue.

j'ai Egalement cree un derive de l'association entre la Personne et la PersonConstraint.
l'Association fin BrokenConstraints retourne tous viole les contraintes pour objet de Personne.

Parce que je n'ai pas specifie de Derives OCL pour l'association, j'ai besoin de fournir de la mise en œuvre de la derivee de l'association dans mon code.

Pour l'association fin BrokenConstraints j'ai cree une fonction declaree comme ceci:

public IList BrokenConstraintsDeriveAndSubscribe(ISubscriber reEvaluateSubscriber, ISubscriber reSubscribeSubcriber)
{
...
}

l'Association a multiplicite n et la fonction doit retourner IList.

Les autres details de sa declaration sont similaires a code attribut derive de la fonction (voir Malcolm Bosquets Blogs).

Dans ma fonction:

  • j'ai creer un nouvel objet la mise en œuvre de IList (par exemple, objet ArrayList),
  • Aller a travers tous les PersonConstrain objets,
  • Evaluer chaque OCLExpression sur la Personne de l'objet,
  • Si la validation echoue, j'ajoute PersonConstraint objet de la liste,
  • de Retour de la liste des resultats

ECO utilise cette fonction pour obtenir BrokenConstraints association fin.

Si la fonction renvoie IList, ECO-cadre se transforme suite a IPersonConstraintList (ce qui est fait par carte de classe dans le cadre).

Pour reevaluer BrokenConstraints pour chaque objet, a chaque fois que l'objet est mise a jour, je vous abonner sur la Personne objet de modifications a l'aide de reEvaluateSubscriber et reSubscribeSubcriber comme ceci:

os.EvaluateAndSubscribe(ce.AsIObject(), c.OCLExpression, reEvaluateSubscriber, reSubscribeSubcriber)

une Autre chose (merci a Jan Viseur de l'aide) est de s'inscrire sur PersonConstraints' expressions OCL modifications:

os.EvaluateAndSubscribe(null, 'PersonConstraint.allInstances.OCLExpression', reEvaluateSubscriber, reSubscribeSubcriber)

Cet abonnement forces toutes les OCLExpressions etre reevaluee pour tous les objets de la Personne lorsque de nouvelles PersonConstraint est ajoute.

C'est comment mon code derive de l'association fonction ressemble a:
public IList BrokenConstraintsDeriveAndSubscribe(ISubscriber reEvaluateSubscriber,
ISubscriber reSubscribeSubcriber)
{
ArrayList brokenConstraints = new ArrayList()
IObjectList contraintes = null
IOclService os =
(IOclService)AsIObject().Fournisseur de services.GetEcoService(
typeof(IOclService))
IElement e = null
objet OCLResult = null

//Recupere toutes les contraintes
e = os.EvaluateAndSubscribe(null,
'PersonConstraint.allInstances', null, null)
si (e est IObjectList)
contraintes = (IObjectList)e

//abonnez-vous sur tous les OCLExpressions
systeme d'exploitation.EvaluateAndSubscribe(null,
'PersonConstraint.allInstances.OCLExpression',
reEvaluateSubscriber, reSubscribeSubcriber)

//aller a travers toutes les contraintes et evaluer des expressions sur l'objet
for (int i = 0 i < contraintes.Le comte i )
{
PersonConstraint c = contraintes[i].AsObject comme PersonConstraint

si (c.OCLExpression =='')
continuer

e = os.EvaluateAndSubscribe(ce.AsIObject(), c.OCLExpression,
reEvaluateSubscriber, reSubscribeSubcriber)
if (e != null)
OCLResult = e.AsObject

//Ajouter a la liste si la contrainte est casse
if (!Convertir des.ToBoolean(OCLResult))
brokenConstraints.Ajouter(c)
}

de retour brokenConstraints
}

Et c'est ma demande:

Maintenant, je peux creer mes propres contraintes de classe/les regles de la saisie des expressions OCL et les messages d'Erreur.

Chaque fois que je acceder Personne de l'objet ou modification de ses attributs, le programme evalue ces expressions OCL et affiche une liste de Messages d'Erreur pour la Personne selectionnee objet.
Si j'ajoute plus de regles, ils obtiennent valide sur la Personne selectionnee objet.

des Que la Personne selectionnee, l'objet est conforme a mon habitude contraintes de classe, les messages d'Erreur disparaît.

le code Source peut etre telecharge a partir d'ici.


Code dérivé des associations

Code dérivé des associations : Plusieurs milliers de conseils pour vous faciliter la vie.
Recommander aux amis
  • gplus
  • pinterest

Messages récents

Commentaire

Laisser un commentaire

évaluation