3

我正在开发一个桌面应用程序,它依赖于它从服务器接收的 XML 数据。有几个文件,需要在不同的时间下载。

许多数据结构都填充了解析的数据。文件和数据结构之间的对应关系不是一对一的,事实上可能相当复杂。

应用程序状态和状态之间的转换取决于这些下载信息的内容(以及它们目前的可用性)。

晦涩的 spagetti 代码处理所有下载事件和相互依赖关系。

我一直在研究某种模式以更统一的方式使用它,但我认为开发人员社区已经找到了最合适的实践和模式。有人知道吗?

4

5 回答 5

3

当你有状态时,你肯定需要状态模式。当您有关于状态转换的复杂规则以及连接到此状态的不同 BL 时,这是最好的方法。首先绘制状态图,然后很容易编写所需的类。

我还必须同意 John 的观察者模式,您可以使用它来进行所需的依赖反转,并轻松处理状态转换。

在您的情况下,您可以将所有 BL 放入状态类并在系统达到该状态时进行处理,您将有代码分离并且没有意大利面条代码......代码将跟随并根据状态转换执行 BL。

于 2009-05-08T08:20:24.670 回答
2

一段时间以来,我一直在广泛使用 Model-View-ViewModel 模式,我强烈推荐它。虽然网络上关于它的大多数文章都将它与 WPF 牢固地联系在一起,但没有理由不将它与其他技术一起使用。我已经将它用于 Web 服务、WPF 客户端和命令行(三个“视图”共享较低层)。

这是我快速而肮脏的描述:该模式由三层(自上而下)组成:视图(通常是 GUI,但实际上是任何外部接口)、视图模型(包含业务逻辑和工作数据集)和模型(域对象等)。每个层直接与下面的层通信,并为上面的层触发事件。

在 .Net 领域,该模式严重依赖 INotifyPropertyChanged 接口。当模型中的数据结构发生变化时,它们可能会触发一个事件。ViewModel 可以更新其状态(应用程序状态)作为响应并触发其事件。然后视图可以更新以显示新的应用程序状态。

这是一篇不错的文章:http: //msdn.microsoft.com/en-us/magazine/dd419663.aspx

再一次,该文章以 WPF 为中心。

我希望这个答案对你来说是正确的。如果没有,有关该问题的更多信息可能会很有用。你不是在谈论信号量、队列和线程吗?

于 2009-05-07T11:47:04.357 回答
1

应用程序状态和状态之间的转换取决于这些下载信息的内容(以及它们目前的可用性)。

看起来您需要使用分层模式。我的意思是在您上面提到的示例中,是在状态模式之上使用策略模式。

于 2009-05-07T17:55:46.967 回答
0

模型视图控制器(MVC)呢?

于 2009-05-07T10:46:11.490 回答
0

事件驱动系统最著名的设计模式之一可能是观察者模式

于 2009-05-07T10:18:26.643 回答