事情经过
在做一个远程控制项目,进行鼠标控制开发的时候,控制端的鼠标信息发送出现错误
调试发现受控端未收到包,经检查发现,原因在于控制端Socket未初始化。
这是我们的发包函数:
可以发现想要初始化socket需要用到ip地址(m_serv_address)和端口号(m_nPort),而这两个参数是主对话框类的成员变量。而在监视窗口上无法直接得到二者。
于是我们对鼠标控制的代码进行了如下修改:
我们通过给主对话框发送消息,进而调用发包函数:
通过主对话框来发送消息。至此问题解决。
但是事实真的如此吗?
设计问题
我们的代码到这个地方,虽然鼠标控制的功能实现了,但是其在设计上违反了MVC的架构。属于控制层的网络通信模块和属于界面层的对话框类产生了强耦合,在功能上产生的问题就如上文所展示的那样,如今我们给主对话框发送一个消息让其“一件代发”,问题解决,但是如果设计上的错误不解决的话,后面越来越多的功能问题会由此产生,进而导致代码逻辑越来越混乱。
总结反思
程序员在技术上,包括你使用的函数、接口、框架等有一定的积累之后,继续往上提升所需要的就不再是单纯的“知识”,更多的是需要你有一种统筹兼顾的大局观。正如今天遇到的这个问题,实现功能不是重点,窥一斑而知全豹,通过功能上的漏洞而知道设计上的缺陷,提早改正防止日后酿成大错,这才是程序员功力百尺竿头更进一步的必由之路。
在进行远程控制项目的鼠标控制开发时,遇到控制端Socket未初始化导致数据包发送失败的问题。通过主对话框发送消息以间接初始化Socket解决了眼前问题,但这种做法违反了MVC架构,造成控制层与界面层的强耦合。文章强调程序员应具备大局观,及时发现并修正设计缺陷,以避免后续的代码混乱。

7022

被折叠的 条评论
为什么被折叠?



