Je suis coincé avec ce qui semblait être une tâche très simple au tout début. J'ai une hiérarchie de classe dans laquelle chaque classe peut définir ses propres règles de validation. Définir les règles de validation devrait être aussi simple que possible. Voici à peu près ce dont vous avez besoin:Comment valider des classes dans une hiérarchie d'une manière générique en toute sécurité?
class HierarchyBase
{
private List<Func<object, bool>> rules = new List<Func<object, bool>>();
public int fieldA = 0;
public HierarchyBase()
{
AddRule(x => ((HierarchyBase)x).fieldA % 2 == 0);
}
protected virtual void Operation()
{
fieldA++;
}
protected void AddRule(Func<object, bool> validCriterion)
{
rules.Add(validCriterion);
}
public void PerformOperation()
{
Operation();
Validate();
}
protected virtual void Operation()
{
fieldA++;
}
private void Validate()
{
IsValid = rules.All(x => x(this));
}
public bool IsValid
{
get;
private set;
}
}
Il y a encore une chose à faire: sécuriser le type lors de l'ajout de règles de validation. Sinon, chaque sous-classe devra faire ces moulages qui semblent juste gênants. Idéalement, Func<T, bool>
fonctionnerait, mais il y a tout un tas de problèmes avec cela: nous ne pouvons pas hériter de HierarchyBase
de n'importe quel type de IValidatable<HierarchyBase>
car la hiérarchie d'héritage peut être N niveaux profonds (ouais, je sens l'odeur aussi); stocker du béton Func<HierarchyBaseInheritor, bool>
dans rules
et de les traverser.
Comment introduiriez-vous la sécurité de type ici?
Je ne sais pas, je comprends le problème, quel est le problème avec l'introduction de médicaments génériques et en utilisant '' Func avec '' HierarchyBase ? –
TheCodeKing