【问题标题】:Looking for design pattern suggestion for multiple hock-able conditions寻找针对多种 hocking 条件的设计模式建议
【发布时间】:2018-10-15 11:09:50
【问题描述】:

我们正在开发 HR ERP。我们有“离开”模块。

其中一个基本功能是请假或请假申请提交。我们有一个使用近 1000 行代码验证请假申请提交的方法。很多if, else and dynamic data conditions 都出现在这种方法上。需要注意的是,这种方法来自遗留系统。

我打算用Strategy pattern来分离业务条件,并将这个1000行的方法重构为多个小块的方法。

我请一些专家就哪种设计模式更适合这种情况提出建议。

我们正在使用带有 C# 的 Asp.Net Core 2.0 MVC(.Net Framework 依赖版本。)。

【问题讨论】:

  • 如果不先检查代码,专家很难发表评论。我不是建议您发布 1000 行,但也许在您分析代码之后,您可能会展示您打算如何部署策略。那么你就有更好的机会得到一个好的回复。
  • 您的帖子中几乎没有足够的数据来选择任何设计模式。 lot's of if, else and dynamic data conditions 不会以任何方式转换为 singleton, strategy, and abstract factory
  • 似乎您在策略模式上走在正确的轨道上,但模板模式也可以发挥作用。发布更多信息 ifs 和其他条件语句是关于什么的。
  • 感谢大家的宝贵cmets。老实说,没有代码很难提出最佳解决方案。最初,我计划使用策略模式重构代码。我可能会尝试发布一些代码片段示例以进一步改进。再次感谢。

标签: c# asp.net design-patterns


【解决方案1】:

基于我有限的上下文,我立刻想到了一些想法

下面的例子是java,但是你可以翻译成c#

1) 如果您的输入类/父类相同,那么您可以拥有一个验证器列表,您可以通过该列表运行您的输入。验证器本身将验证单个因素,并将按注入顺序执行。这与策略模式非常相似。

List<Validator> validators= {ValidatorA.class,ValidatorB.class,....};

public void foo(Input input){
for(Validator validator:validators){ // or use lambda
    validator.validate(input);
}

2) 如果您的验证也有很多 if/else 情况,您希望避免一起调用一些验证,那么就会想到模板模式。但是模板模式有点难以阅读/维护(imo),所以我个人更喜欢策略模式。但是模板模式在某些情况下确实更有意义。因此,您可以评估它是否适合您的用例。

【讨论】:

  • 感谢您的回答。我为像你这样的一些专家找到了一个共同的建议。我最初计划应用该策略。我将尝试发布一些代码片段以获得进一步的改进建议。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多