【问题标题】:Custom rule pattern implementation自定义规则模式实现
【发布时间】:2018-10-26 23:07:27
【问题描述】:

我有一个业务规则列表,我需要将其应用于 json 数据,然后通过 http post 将其输出。

规则规定了如何根据字符串的类型和值来格式化字符串。 例如:

  • 名字,首字母大写。
  • 中间名:如果是一个字母,则附加“.”最后

具有挑战性的部分是我希望能够在不更改代码的情况下添加/删除业务规则。所以我考虑将规则及其定义存储在一个 sql 表中。

表格如下所示:

| RuleName | Action | |---------------------|------------------ | | padLeft | PadLeft<x> | |---------------------|------------------ |

我不知道如何将规则转化为他们应该采取的行动。我遇到了this,这与我正在寻找的非常接近。也许我过于复杂了,所以我愿意接受不同的建议

【问题讨论】:

  • 你描述的那些规则需要一个完整的编程语言,或者非常接近它的东西。您可以搜索 .NET 表达式评估器库(FLEE、NCalc 等),如果有一个可以满足您的所有需求,请将表达式作为字符串存储在数据库中。我不建议您为这个项目编写自己的(作为一个项目本身,我不能再推荐任何东西,至少就编程而言)。
  • 当您说“不更改代码”时 - 您的意思是不更改 任何 代码还是不更改代码的其他部分 - 就像您想要隔离他们自己的类中的业务规则?
  • 我可能会对“which”规则进行某种枚举,并将其存储在您的数据库中。然后你可以使用一个开关关闭它,然后迭代规则以从数据库中应用。

标签: c# linq pattern-matching predicate rules


【解决方案1】:

如果您想在不重新构建代码的情况下向代码添加新行为,则无需重新发明轮子,请使用插件。

您必须提供插件类必须实现的接口,并且如果您不想重新启动应用程序,则必须提供一种在运行时使用反射加载这些 dll 的方法。

如果需要,我可以为您提供更多详细信息,但互联网上有很多关于开发 C# 插件的信息。使用数据库来存储行为而不是数据对我来说听起来像是一种代码味道。

【讨论】:

  • 我会研究插件的想法。谢谢!
  • 如果您认为这是解决方案,请接受答案。
猜你喜欢
  • 2021-12-08
  • 2020-09-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-08-21
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多