串行终端应用的设计模式

时间:2011-02-01 16:37:37

标签: c# .net design-patterns architecture

我在内部串行终端应用程序中作为单个开发人员工作。我的目标是编写一个足够灵活的框架,以便我可以使用它来创建三个独立的应用程序:

  • 串行终端应用程序(很像HyperTerminal)
  • 数据分析应用程序(将根据特定标准对序列数据进行排序和显示)
  • 解码应用程序(将处理串行数据并显示数据库中的相关信息)

在未来的某个时刻,我想将这三个应用程序合并为一个。但是,这远非优先考虑。

我已将框架分成三个独立的部分 - GUI(View接口),后端(Controller接口)和设置处理程序(ISettingsHandler接口)。但是,我已经遇到了一些循环依赖问题(ISettingsView必须被移动到与ISettingsHandler相同的命名空间),这表明未来会遇到更多麻烦。

我对每个申请的要求如下:

  • 串行终端 - GUI必须能够与串口传输数据,显示和修改设置以及发送文件
  • 串行分析应用程序 - GUI必须能够检索传入的串行数据并显示和修改设置
  • 解码应用程序 - GUI必须能够检索传入的串行数据

我是否让它变得比它应该更复杂?我知道我可以用更少的接口来完成同样的事情,但是我担心这个框架的灵活性以备将来使用。是否有适合这种情况的设计模式?

Current pattern diagram

编辑:为了澄清,框架的三个“部分”中的每一个都在不同的名称空间中。

我已经修复了循环依赖,但是,我仍然不确定这是这个应用程序的最佳设计模式。有什么建议吗?

3 个答案:

答案 0 :(得分:2)

其中一个设计原则是“好莱坞原则”,其中规定“你不打电话,我们会打电话给你”(来自Head first design patterns)

循环依赖是一个常见问题。为了避免它遵循这个原则。

不要在较低层中引用更高层的接口/类。较高层类应该使用较低层接口/类。

例如,ISettingsHandler应该引用IController而不是其他方式。即使您正在实施具体课程,也要遵循原则。

您的代码将更易于维护。

答案 1 :(得分:1)

如果遇到循环依赖关系,则需要将共享资源提取到另一个项目中(例如:将所有接口放入MyProject.Contracts项目中)。但是,如果您遵循正确的分层,则不应该遇到这些问题。

答案 2 :(得分:0)

在这里,您可以使用基于opon hollywood principale的接口依赖注入