我有一个项目,其活动和功能在大多数情况下遵循顺序过程。但有时候你需要回去"您的步骤并重新运行以前的功能。
我制作了状态图,看看它会有多复杂。
我认为第一种方法是应用状态模式,但状态数似乎不可行。然后"我分开了#34;并将其分为6个过程。每个过程的成绩都是我想象的那样:
TProcessXXX = class(TProcess)
private
{* atributos privados, etc.. *}
public
{* funciones y actividades *}
procedure DoActivity1;
procedure DoActivity2;
{* ... *}
function DoActivityN: TResultProcess;
end;
每个进程的大多数活动都在封装所需数据结构的同一个类上运行。我的意图是每个流程都可以通知已经结束另一个流程然后下一个工作。
我所见过的设计是Mediator模式,并且有一个封装状态图的类和" enable"每个过程。 为了相互协调,我考虑添加方法与协调器/中介类进行通信。包括:
function TProcess.RequestPermission: boolean;
procedure TProcess.NotifyFinishOperation(Result: TResultOperation);
在这个过程中,我设计了一些独立性。
至于不要求每个活动的许可,有些人需要一些冗余的排序,并一次又一次地问,我应用了一个"锁定"允许启用它们。
TProcessXXX.PrepareToWork;
var req: boolean;
begin
req: = RequestPermission;
then begin if req
EnableActivitys
Work;
end;
end;
到目前为止一切顺利。当我从Presentation层调用操作进程时,我开始怀疑。 要获得调用权限,我有从层Presentation到Mediator的间接:Presentation - > TProcessXXX - >中间人 然后我们获得了每个活动的另一个许可:演示 - > TProcessXXX - > TDataStructure
当进程获得权限时,使用TDataStructure为自己捕获。它将在操作完成之前接管。与此同时,其他流程也是“空闲”。从Presentation层可能会给你不必要的操作请求。
我考虑过禁用控制,这是最直接和最容易的。但是,必须始终启用和禁用。
我问:你推荐什么替代品?是否有一种模式可以解决"空闲流程"?
的主题编辑:
我研究过策略和访客等替代品,但我不确定它们是否是最佳选择。而且我承认也许这三种模式(Mediator,Strategy,Visitor)并不占主导地位的100%。 我忘了澄清这一点。道歉。
我还要补充一点,如果我应该投反对票,至少应该发表评论来解释原因。
编辑2:
根据建议,我附上了状态图图片的链接:
在图表中,您可以看到有一个选择。设计是为了在启动时评估哪个是最后达到的状态并从那一点继续。
在此图中,我在五个流程中分别开展了各种活动:配置,管理集,培训,测试和识别。
我又添加了一个,第六个命名的初始化程序,它具有使用从数据库访问的数据初始化数据结构的功能。
每个过程都是调解员的同事。 Mediator实现了这个状态图并决定处理他" permission"操作。
答案 0 :(得分:0)
你的问题不是最好的形成,所以我不能完全确定你想要实现的目标。但我想你想要实现一些基于某些条件的更复杂的代码流控制。
如果我的假设是正确的,你应该检查决策树模式。
在决策树模式中,您将工作划分为多个较小的步骤(这就是您已经尝试实现的步骤)。
在每个步骤结束时,您检查特定条件,然后根据该条件决定如何继续(继续下一步,重复当前步骤,甚至跳转到完全不同的步骤)。
根据您的SO资料信息,我看到您是计算机工程专业的学生,所以我可以告诉您,决策树的使用通常在AI开发课程中进行深入讨论,因为大多数复杂的AI算法实际上依赖于使用决策树模式它具有很好的可扩展性。
因此,您可能需要查看您的学校课程,了解描述AI开发的部分。