0

フォームを含むページの cms があります。

cms に、すべて検証インターフェイスを実装するさまざまなクラス名のドロップダウンが必要です。

フォーム ハンドラーには、選択した検証クラスに対して検証するプロセス メソッドが含まれています。

だから私はこのインターフェースを持っています:

public interface IEligibilityValidation
{
    bool IsValid();
}

たとえば、このクラス

public class ComplexEligibilityValidation : IEligibilityValidation
{
    public bool IsValid()
    {
        return true; /* complex logic here */
    }
}

public class SimpleEligibilityValidation : IEligibilityValidation
{
    public bool IsValid()
    {
        return true; /* less complex logic here */
    }
}

そして、検証のために選択したクラス名を読み取ることができるフォームハンドラーがあります。

ハンドラーが IEligibilityValidation も実装する必要があるかどうか、またはリフレクションを使用して何らかの方法でクラスを呼び出すことができるかどうかはわかりません。

例えば:

public class SampleFormHandler : IEligibilityValidation
{
    public SimpleFormHandler(FormViewModel model, INode node)
    {
        this.model = model;
        this.node = node;

        eligiblityValidationClass = GetPropertyValue("eligibilityValidation");

    }

    public SampleProcessResult Process()
    {
            if (!string.IsNullOrEmpty(eligiblityValidationClass))
            {
                var thisType = Type.GetType(eligiblityValidationClass);
                var thisInstance = Activator.CreateInstance(thisType);
                var isValid = ((IEligibilityValidation)thisInstance).IsValid();
                /* Works however, I need the IsValid to have access to a the FormHandler's properties and injected services */
            }

    }

    public bool IsValid()
    {
        /* Will Always be ignored */
        return true;
    }
}

このようなことを行うための最もエレガントな方法は何ですか?

異なる FormHandler には異なる Validation クラスが割り当てられ、呼び出されたときに IsValid メソッドがそのフォームのプロパティを使用できるようになるという考え方です。

不要なコードを必要とするだけでなく、高度なアーキテクチャまたはよりスマートなものを探しています。

ありがとう

4

2 に答える 2