私はこのクラスを持っています、それを払い戻し(それはそれが呼ばれているので)と呼ぶことにしましょう。この払い戻しとそれが添付されている顧客に関するいくつかの事実を検証したいと思います。その妥当性確認を再注文可能にしたいのですが、その最初のものは拒否理由として払い戻しに保存されます。他の人よりもリソースを大量に消費する可能性が高くなり、必要に応じていくつかのパフォーマンスを絞り込めるように、その実行を簡単に並べ替えることができるようにしたいと考えています。クラスのデータ検証用のこのデザインは良いアイデアですか?
妥当性検査メソッドはすべて払い戻しオブジェクトを取り、検証が合格したか失敗したかを示すブール値を返します。だから、私は思っていた、なぜ検証メソッドを表すデリゲート/ラムダ/匿名関数を保持するキュー(または他のデータ構造)を作成しないでください?次に、払い戻しをいくつかの種類のValidator(Refund refundToValidate)メソッドに渡します。このメソッドは、デリゲートの配列を順番に呼び出すとともに、それぞれがfalseを返す場合はfalseを返します。
これは良い考えですか、ばかげた考えですか?それが良い考えであれば、どこかのリソースに私を指摘できますか、または私が意図せず実装しているパターンの名前を付けることができますか?それが愚かな考えであれば、なぜ、どうすれば違うやり方をするのだろうか?
編集:ここで私が遠
public static class Validator
{
delegate REFUNDDENIALREASONS validationHandler(BatchRefund refundToValidate);
public static List<REFUNDDENIALREASONS> ValidateRefund(BatchRefund refundToValidate)
{
List<Delegate> Validations = new List<Delegate>();
List<REFUNDDENIALREASONS> DenialReasons = new List<REFUNDDENIALREASONS>();
Validations = new List<Delegate>();
validationHandler blockHandler = ValidateBlocks;
Validations.Add(blockHandler);
validationHandler accountHandler = ValidateCustomerAccountStatus;
Validations.Add(accountHandler);
foreach (validationHandler v in Validations)
{
DenialReasons.Add(v(refundToValidate));
}
return DenialReasons;
}
public static REFUNDDENIALREASONS ValidateCustomerAccountStatus(BatchRefund refundToHandle)
{
REFUNDDENIALREASONS denialReason;
switch (refundToHandle.RefundCustomer.CustStatus)
{
case "C":
denialReason = REFUNDDENIALREASONS.None;
break;
case "Y":
denialReason = REFUNDDENIALREASONS.AccounthasrecentChargebackNSF;
break;
default:
denialReason = REFUNDDENIALREASONS.Fraud;
break;
}
return denialReason;
}
public static REFUNDDENIALREASONS ValidateBlocks(BatchRefund refundToHandle)
{
List<CustomerBlock> blocks = refundToHandle.RefundCustomer.Blocks;
//add new codes to block here
string[] illegalblockcodes = new string[] { "L1", "C1" };
foreach (string code in illegalblockcodes)
if (blocks.Exists(b => b.BkClassCode == code))
{
return REFUNDDENIALREASONS.Fraud;
}
return REFUNDDENIALREASONS.None;
}
}
私はバリデーターの1つから複数のリターンが出てきたことを知っています!先制的な "私の背中から降りてください!" –