C# 串行终端应用程序的设计模式

C# 串行终端应用程序的设计模式,c#,.net,design-patterns,architecture,C#,.net,Design Patterns,Architecture,我作为一名开发人员在一个内部串行终端应用程序上工作。我的目标是编写一个足够灵活的框架,我可以使用它创建三个独立的应用程序: 串行终端应用程序(很像超级终端) 数据分析应用程序(将根据特定标准对串行数据进行排序和显示) 解码应用程序(将处理串行数据并显示数据库中的相关信息) 在将来的某个时候,我想将这三个应用程序合并为一个。然而,这远远不是一个优先事项 我已经将框架分为三个单独的部分——GUI(视图界面)、后端(控制器界面)和设置处理程序(ISettingsHandler界面)。然而,我已经遇

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

  • 串行终端应用程序(很像超级终端)
  • 数据分析应用程序(将根据特定标准对串行数据进行排序和显示)
  • 解码应用程序(将处理串行数据并显示数据库中的相关信息)
在将来的某个时候,我想将这三个应用程序合并为一个。然而,这远远不是一个优先事项

我已经将框架分为三个单独的部分——GUI(视图界面)、后端(控制器界面)和设置处理程序(ISettingsHandler界面)。然而,我已经遇到了一些循环依赖性问题(ISettingsView必须移动到与ISettingsHandler相同的名称空间),这表明今后会有更多的麻烦

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

  • 串行终端-GUI必须能够在串行端口之间传输数据、显示和修改设置以及发送文件
  • 串行分析应用程序-GUI必须能够检索传入的串行数据并显示和修改设置
  • 解码应用程序-GUI必须能够检索传入的串行数据
我有没有让事情变得比应该的更复杂?我知道我可以用更少的接口来完成同样的事情,但我担心这个框架在将来使用时的灵活性。是否有适合此场景的设计模式

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


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

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

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

循环依赖是一个常见的问题。要避免这种情况,请遵循这一原则

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

例如,ISettingsHandler应该引用IController,而不是相反。即使在实现具体的类时,也要尝试遵循这个原则


您的代码将更易于维护

这里您可以使用基于好莱坞原则的接口依赖注入

我应该将所有接口保持在同一名称空间中吗?我的印象是,它们应该与从它们派生的类位于相同的名称空间中。接口与类无关。接口是任何人都可以实现的契约,因此它们不需要位于同一命名空间中。如果所有3个层都引用了一个接口,则需要将其提取到一个不引用任何其他项目的共享项目中。这就是解决循环dep问题的方法。名称空间是逻辑分隔符,也是组织类的一种方式。如何组织它们取决于您。如果它们不相关,我不会将它们放在同一个名称空间中。+1@gbsandeep你无法想象你关于好莱坞原则的提示对我有多大帮助。谢谢