繁体   English   中英

适当的编程设计问题

[英]Appropriate programming design questions

我对好的程序设计有一些疑问。 我将首先描述我正在构建的项目,以便您有更好的条件来帮助我。

我正在编写类似于TeamViewer,Microsoft远程桌面,CrossLoop的远程协助工具。 它将合并以下概念,例如UDP网络(使用Lidgren网络库),遍历NAT(由于如今许多计算机在路由器后面是不可见的),镜像驱动程序(使用DFMirage的镜像驱动程序( http://www.demoforge.com/dfmirage.htm ))远程计算机上的实时屏幕抓取)。

话虽这么说,该程序的概念是客户端-服务器体系结构,但是我只制作了一个兼具客户端服务器功能的程序。 这样,当用户运行我的程序时,他们可以在提供帮助和接收帮助之间切换,而不必下载单独的客户端或服务器模块。

我有一个Windows窗体,允许用户在提供帮助和接收帮助之间进行选择。 我有另一个Windows窗体的文件浏览器模块。 我还有一个用于聊天模块的Windows窗体。 我还有一个注册表编辑器模块的Windows窗体表单。 我有另一个Windows窗体的实时控制模块。 所以我为每个模块都有一个表格,这引发了第一个问题:

1.我应该在相应Windows窗体的代码中处理特定于模块的命令吗? 意思是说,我得到了一个包含一些数据的命令,该数据枚举了特定目录的远程用户文件。 显然,我将不得不在文件资源管理器Windows窗体上对此进行更新,并将条目添加到ListView。 我是否应该在Windows窗体中处理此代码? 还是应该在另一个类中处理这个问题(当然,尽管我最终必须将数据传递给Form进行绘制)。 还是像混合方法那样,我处理另一个类中的大多数数据并将最终结果传递给表单以进行绘制?

所以我有5-6个表格,每个模块一个。 用户启动我的程序,输入远程计算机的ID(不是IP,ID,因为我们正在向中介服务器注册以启用NAT遍历),他们的密码并进行连接。 现在,我们假设连接成功。 然后,向用户显示具有所有不同模块的表单。 因此,他可以打开文件资源管理器,或者可以与注册表编辑器混为一谈,或者可以选择与好友聊天。 因此,现在程序有点空闲,只是在等待用户做某事。 如果用户打开Live Control,则该程序将花费大部分时间从远程计算机接收数据包并将其绘制到窗体上以提供“实时”视图。

2.第二个设计问题。 衍生问题#1。 如何将特定于模块的命令传递给它们各自的Windows窗体? 我的意思是,我有一个类似“ NetworkHandler.cs”的类,用于检查来自远程计算机的消息。 NetworkHandler.cs是可全局访问的静态类。 假设我得到一个列举特定目录的远程用户文件的命令。 怎么会“ 放弃 ”该命令将文件浏览器表单。 我当时正在考虑在NetworkHandler内制作一个OnCommandReceivedEvent,并让每种表单都注册到该事件。 当NetworkHandler收到命令时,它将引发该事件,所有表单将对其进行检查以查看其是否相关,然后适当的表单将采取行动。 这是合适/最佳的解决方案吗?

3.我使用的网络库Lidgren提供了两个检查网络消息的选项。 一个人可以轮询ReadMessage()以返回null或一条消息,或者可以使用AutoResetEvent OnMessageReceived(我猜这就像一个事件)。 哪一个更合适?

  1. 在表格中放入尽可能少的代码。 您应该创建一个单独的类/一组类来处理此问题,并使表单使用它们进行绘制。

  2. 活动似乎是个好主意。 我不会让表单订阅,而是让另一个类进行处理,只是将处理后的数据传递给表单(通过另一个事件)。

  3. 我将使用该事件,因为它可能检查异步,这就是您想要的。 您不想在等待消息时锁定表单。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM