首页 > 解决方案 > 我怎样才能避免这种设计的神级反模式

问题描述

我想我设计的应用程序将所有逻辑集中在一个类 (A) 中。我一直在阅读这不是一个好的做法。A 类有很多嵌套逻辑,Solve() 的每个方法都使用前一个方法的结果作为输入。我不知道是否应该为 DoTask1、DoTask2、DoTask3 和 DoTask4 创建单独的类,并从 Solve() 实例化它们。那会更好吗?我知道我也可以使用静态方法创建单独的类,但我读过太多静态方法不好。

 Main()
 {
   A a = new A()
   a.Solve()
 }


 A()
 {
     Solve()
     {
        partialresult1 = DoTask1()
        partialresult2 = DoTask2(partialresult1)
        partialresult3 = DoTask3(partialresult2)
        finalresult = DoTask4(partialresult3)
     }

     DoTask1(){} 
     DoTask2(){} 
     DoTask3()
     {
        B b = new B()
        b.doWathever() 
     } 
     DoTask4(){} 
 }


 B()
 {
     doWhatever(){} 
 }

标签: c#design-patterns

解决方案


如果没有问题的全部范围,很难知道,但我会猜测并提出建议。

您有不同的有效负载,并且基于它们,您希望应用不同的任务。

我首先会创建 ITask 接口:

public interface ITask {
     Result DoWork(PartialResult res);
}

现在您可以创建可以完成部分工作的任务类。客户端可以创建列表并相应地执行。

public Task1: ITask {
    public Result DoWork(PartialResult res) {
         // some work here
    }
}

现在作为额外的,您可以使用 AbstractFactory 设计模式。每个抽象工厂实现都会创建特定作业所需的任务列表。客户端可以使用它们来执行有效负载。

这两个解决方案可能会让你的超类过时

有关 AbstractFactory 设计模式的更多信息,请查看:https ://refactoring.guru/design-patterns/abstract-factory


推荐阅读