结构设计应该面向什么?在UML设计与模式开发一书讲到,设计的主要思维是面向对象,以职责(responsibility)来驱动整个对象,从而来快速管理开发项目。最近一段时间我又设计开发一个新的项目,基于TCP/IP的C/S网络应用程序,结果在设计开发中又是遇到一系列让我头痛的问题。核心的问题是:系统效率问题,资源浪费问题,错误处理等一些与类的设计无关的问题。从类的设计上看,问题都不是很明显。从一开始设计到后来的测试以及修改,最开始的类都没有什么变化,而做了大的变动的是数据及消息的处理模块。这让我有点郁闷。应该说,在软件的设计上,只是面向对象还是不够的。对于系统的架构,还应该考虑性能与效率问题。
例如,一个网络连接设计成一个类,它自己负责接收与发送数据,并通知上层应用程序数据的接收成功及错误等一系列问题。这样的设计理论上很不错不是吗?而且它还可以很快的扩展到其它应用程序中,形成一个底层的数据收发小模块。这样可以重复应该,而且做一些数据接口,在后续的应用层上,如果在扩展数据类型也可以很方便的使用。然而问题是,如果让一个类来自己处理数据的接收与发送,必然会让它有自己的处理单元,至少要一个线程。这样一来,当连接用户过多的时候,系统的线程就会负担过重。从而使这样的一种设计方法全部被否决。必须让一个线程处理多个用户的数据,并且要合理的分布资源,在某些用户的网络速度不佳的时候,能保证网络速度快的用户能以最合理的网速来处理数据。这样一来,前面的设计,面向单个连接的思想就全部无效了。必须重新考虑,应该面向整个数据处理模块了。
最近一直没写什么东西,就是被这个小项目搞糊了!本来还想写一篇关于用C#写网络应用程序的文章以及利用IIS做类似FTP的小应用程序。结果在测试后,让我很失望,自己的一些想法以及做法又是失败的。这个项目已经重新写了两次了,而昨天又已经决定重新再写一次!希望能越改越好。