一連のルールをビジネスオブジェクトのコレクションに適用したいと思います。これらは単純なルールであり、既存のビジネスルールエンジンは使用したくありません。
各ルールに異なるコンテキストを渡す必要があるため、理論的には、すべてのルールに異なるパラメーターが必要になる場合があります。以下は私が現在それをしている方法です。他の/より良い方法はありますか?
注:Visitorパターンを使用して評価しましたが、この特定のシナリオでは手間がかかりすぎるようです。実際のルールは、私が例に示したものほど複雑ではありません。
interface IParamBase {}
interface IParam : IParamBase
{
string MyProperty {get; set;}
}
class Param : IParam
{
public string MyProperty {get; set;}
}
interface IRule
{
void Setup(IParamBase param);
void Apply(BusinessObject businessObject);
}
class Rule :IRule
{
IParam _param;
public void Apply(BusinessObject businessObject)
{
businessObject.AssignedFromRule = _param.MyProperty;
Console.WriteLine(businessObject.AssignedFromRule);
}
public void Setup(IParamBase param)
{
_param = param as IParam;
}
}
class BusinessObject
{
public string AssignedFromRule {get; set;}
}
void Main()
{
var rule = new Rule();
var param = new Param();
param.MyProperty = "my property";
BusinessObject businessObject = new BusinessObject();
rule.Setup(param);
rule.Apply(businessObject);
}
更新:ダウンキャストの必要性をサンプルに追加するのを忘れました。