【发布时间】:2021-01-25 13:16:10
【问题描述】:
我的问题是根据面向对象的编程原则重构程序。程序无休止地在一个while循环中运行,所有操作都在这个主while循环中。这个主循环有一个 switch-case 语句。
它有 11 个案例,所有案例都是代表语句,如 unplanned_stop、planned_stop、read_data_from_x、read_data_from_y... 此外,这些状态中有 if-else 子句来调用不同的函数。每个状态都根据 if-else 决策指向另一个状态以进行下一步。
我已经搜索过,状态设计模式似乎适合这个解决方案,但我不确定。 主循环是这样的:
while(programIsRunnning)
{
switch(programState)
{
case state.StartOfLoop:
if(..) doSomething();
else doAnotherThing();
programState = state.PlannedStop;
break;
case state.PlannedStop:
if(..) programState = state.ReadDataFromX;
else programState = state.ReadDataFromY;
case state.ReadDataFromX:
if(..) programState = state.UnplannedStop;
else programState = state.StartOfLoop;
.
.
.
我希望我能解释清楚。这种设计令人讨厌,很难理解在哪里实施新规范。对于程序的每个新请求,我都必须编辑其他状态和 if-else 子句。我是一名大三学生,我所能想到的就是用 OOP 设计模式对其进行重新编码。欢迎提出任何建议。
【问题讨论】:
-
嗨,将其重构为 OOP 听起来正是您应该做的 :)。继续前进! Stackoverflow 最适用于特定问题,对于给出可重现代码的特定问题。当你有其中一个时,回来发一个新帖子:)
-
嗯,你这里的是一个状态机。如果您想要(或需要)重构它,您首先需要了解为什么它被设计为状态机。是否涉及一些硬件? - 或者你只是想要“一个 OOP 风格的状态机”?
-
另外:你对代码有足够的控制权来进行这样的“大修”吗?你需要时间,可能需要很多时间,而且你需要证明你没有破坏任何东西。
-
您可以查看stateless 以获得一些启发。
-
是的,它从树莓派获取数据
标签: c# oop design-patterns refactoring