【问题标题】:How do I design a Wizard-based system with SoC in mind?如何设计基于 SoC 的基于向导的系统?
【发布时间】:2010-05-10 16:06:59
【问题描述】:

我正在构建一个提供应用程序自动化服务的 Windows 窗体系统(如果对任何人都重要,则使用 C#)。由于此应用程序面向不精通计算机的用户,因此我决定使用向导 UI 为用户简化操作。我想避免将视图和视图引擎(将从其构建向导)耦合到自动化引擎。

我遇到的问题是自动化引擎在执行其操作时在单独的线程上运行,需要将状态信息报告给用户,并监听来自用户的取消或暂停事件。由于我不希望视图引擎或自动化引擎相互依赖,因此我很难弄清楚如何提供此信息管道。

如果我对这个问题有任何见解,我将不胜感激。在这一点上,我已经绞尽脑汁好几个星期了,我真的不想放弃,只想把所有东西结合在一起。

如果有人需要更多详细信息来帮助提出某种想法,请告诉我,我很乐意为他们提供。

【问题讨论】:

    标签: .net architecture wizard separation-of-concerns


    【解决方案1】:

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

    我知道这是一个广泛的答案,但我会先研究这种方法。它为您提供了所需的关注点分离,还为您提供了一个可以像您设计的那样多功能的交流平台。

    最后,给你一点建议,你可能不需要。你不应该让通信类依赖于任何可能导致你遇到循环引用问题的东西。我会让这个类尽可能地不可知,它需要的任何对象都应该与向导/平台需要的对象分开,除非它们本质上是相当通用的,这样你才能真正分离关注点。

    希望这会有所帮助。

    【讨论】:

    • 我最终创建了一个消息传递管道,我可以将它传递给视图引擎(及其视图)以及它们需要与之通信的服务。谢谢=)
    • 感谢您告诉我。我很高兴我的建议对你有用。
    猜你喜欢
    • 1970-01-01
    • 2012-03-24
    • 1970-01-01
    • 1970-01-01
    • 2019-03-08
    • 2015-09-05
    • 2018-11-20
    • 2011-12-13
    • 2013-04-14
    相关资源
    最近更新 更多