Asp.net 设计模式建议:规则检查器
我通过我的网站销售产品。最近,我们收到了一份规则清单,需要根据每个订单进行检查,以确保它不是欺诈性的。因此,此规则/欺诈指标列表将发生变化并不断增长,因此我希望确保其易于维护且确实可靠 我想我有一个抽象的Asp.net 设计模式建议:规则检查器,asp.net,design-patterns,Asp.net,Design Patterns,我通过我的网站销售产品。最近,我们收到了一份规则清单,需要根据每个订单进行检查,以确保它不是欺诈性的。因此,此规则/欺诈指标列表将发生变化并不断增长,因此我希望确保其易于维护且确实可靠 我想我有一个抽象的类规则,每个规则都实现了它 abstract class Rule { public string Message; public bool Success; public void CheckOrder(OrderItem currentOrder); } class
类规则
,每个规则都实现了它
abstract class Rule
{
public string Message;
public bool Success;
public void CheckOrder(OrderItem currentOrder);
}
class FakeCreditCardNumberRule : Rule
{
public string Message = "Fake CC Number Rule";
public void CheckOrder(OrderItem currentOrder)
{
currentOrder.CreditCardNumber = "1234-5678-9012-3456";
Success = false;
}
}
class ReallyLargeOrderRule : Rule
{
public string Message = "Really Large Order Rule";
public void CheckOrder(OrderItem currentOrder)
{
currentOrder.ItemsOrder.Count > 100;
Success = false;
}
}
然后我考虑让一个类在它的构造函数中接受一个Order对象
,并检查规则列表。比如:
class FraudChecker
{
List<Rule> rules;
public FraudChecker(OrderItem currentOrder)
{
foreach(var rule in rules)
{
rule.CheckOrder(currentOrder);
}
}
}
class-FraudChecker
{
列出规则;
公共欺诈检查程序(OrderItem currentOrder)
{
foreach(规则中的var规则)
{
规则.检查顺序(当前顺序);
}
}
}
因此,我试图想出最好的地方/最好的方法来填充欺诈检查程序
.规则列表,并开始思考可能会有一些很好的设计模式,可以像我正在做的那样
有人见过我应该在这里使用的设计模式吗?或者有人能想出一个好地方来填充这个列表吗
-Evan您已经使用了Startegy模式。。。我相信工厂模式可以解决你的问题
我可能会使用自己的enum实现。我将创建这样一个类:
public sealed class Rules
{
public static readonly Rule FakeCreditCardNumberRule = new FakeCreditCardNumberRule ();
public static readonly Rule ReallyLargeOrderRule = new ReallyLargeOrderRule ();
//here I would write more
private static readonly List<Rule> _all = List<Rule> { FakeCreditCardNumberRule, ReallyLargeOrderRule };
//every time you add new rule to the class you have to add it to the _all list also
public static IEnumerable<Rule> All
{
get
{
return _all;
}
}
public static FraudChecker(OrderItem currentOrder)
{
foreach(var rule in All)
{
rule.CheckOrder(currentOrder);
}
}
}
Rules.FraudChecker(currentOrder);
或
您可以将每个新规则添加到Rules类中。您还可以在其中创建只处理部分规则的新方法,依此类推。规范模式
我一直在处理一个非常类似的问题
我发现这个方法特别有用
对我来说,模式的主要好处是它结合了链接的方式
上面的链接提供了一个基本概述,文章中的相关链接也很有用。之后,如果您进行更多搜索,您将找到更详细的示例
Rules.FakeCreditCardNumberRule.CheckOrder(currentOrder);