代码之家  ›  专栏  ›  技术社区  ›  Erik Forbes

如何设计一个基于SOC的向导系统?

  •  1
  • Erik Forbes  · 技术社区  · 14 年前

    我正在构建一个提供应用程序自动化服务的Windows窗体系统(在C中,如果它对任何人都重要的话)。由于此应用程序针对的是不懂计算机的用户,所以我决定使用向导用户界面为用户简化操作。我希望避免将视图和视图引擎(将从中构建向导)耦合到自动化引擎。

    我遇到的问题是,自动化引擎在执行任务时在单独的线程上运行,它需要向用户报告状态信息,并听取用户的取消或暂停事件。因为我不希望视图引擎或自动化引擎相互依赖,所以我很难弄清楚如何为这个信息管道提供支持。

    我对这个问题的任何见解都会非常感激。在这一点上,我已经绞尽脑汁好几个星期了,我真的不想放弃,只想把一切都结合在一起。

    如果有人需要更多的细节来帮助提出一些想法,请告诉我,我很乐意提供。

    1 回复  |  直到 14 年前
        1
  •  1
  •   joshlrogers    14 年前

    为什么中间没有一个线程安全对象作为两个对象之间的通信平台呢?这个类将拥有它自己的事件以及提供输入和提取所需信息的方法的属性和方法。您甚至可以更进一步,如果您有多个向导和自动化平台同时运行,如果它们是唯一可识别的,我将设置向导ID到平台ID的散列,并且您的对象可以一次处理多对的通信。这需要非常小心,确保一切都是线程安全的,并且您正在执行的通信只使用与该向导平台对相关的信息。

    我知道这是一个宽泛的答案,但我会先看看这种方法。它为您提供了所需的关注点分离,还为您提供了一个通信平台,该平台可以像您设计的那样通用。

    最后,一句建议,你可能不需要。您不应该使通信类依赖于任何可能导致您遇到循环引用问题的内容。我会尽可能使类不可知,它所需要的任何对象都应该与向导/平台所需要的对象分离,除非这些对象在本质上是非常通用的,这样您就可以真正地分离关注点。

    希望这有帮助。