c# - 我怎样才能避免这种设计的神级反模式
问题描述
我想我设计的应用程序将所有逻辑集中在一个类 (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(){}
}
解决方案
如果没有问题的全部范围,很难知道,但我会猜测并提出建议。
您有不同的有效负载,并且基于它们,您希望应用不同的任务。
我首先会创建 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
推荐阅读
- typescript - 无法将 isoWeekDay 与矩变量一起使用
- python - Pandas 通过检查列表元素是否包含值进行选择
- r - 防止 R 自动获取已安装软件包的最新版本?
- javascript - 是否可以查看 JSON 文件中的多个对象分组?
- python - 如何编写一个递归函数来计算几年后的硬币净值?
- r - Optim() 函数以小数为单位变化?
- oracle-apex - 将应用程序导入/导出到新环境时的 Oracle APEX 应用程序安全性
- visual-studio - 是否可以将 Visual Studio 2019 配置为在解决方案资源管理器中对旧样式和新 SDK 样式项目进行相同处理?
- jinja2 - 在这种情况下,模数 (%) 是什么意思?(姜戈)
- python - 通过以下索引连接单词