对编程的一点感悟
推荐 原创
©著作权归作者所有:来自51CTO博客作者xchsp的原创作品,请联系作者获取转载授权,否则将追究法律责任
回想着以前做过的项目,突然想到了MFC的文档/视图框架,重新翻开书看看,有了一种豁然开朗的感觉,孔子说的有道理啊,温故而知新。
无论是MFC的文档/视图结构也好,还是设计模式提倡的MVC结构(模型-视图-控制器),现在想想都是明确了软件的分工。视图是界面的表现,文档是存储的介质。我手中的这本MFC老书,举了这样一个例子来讲解文档/视图结构。在界面上作图,圆,曲线等等,作好的图可以保存到文档(文件)中,再打开文档又可以显示到视图上。书里还对MFC的集合类做了介绍,书中介绍的这个作图小程序是分两章介绍的。第一章没有用到集合类,只是简单的CLine等等。第二章介绍集合类,使用了链表结构,来保存CLine,这样就可以在视图上画多条线。这里的原理是,界面提供显示和供用户操作(添加,删除线段),CLine的集合被保存在集合类中,也可以说被临时保存在内存中,当用户结束作图之后,可以选择保存,将自己做的图形从集合类(内存)中写到文档(文件)中。下次再打开的文档的时候,把数据从文件读到内存中,用户可以再次编辑,内存(集合类中的元素也随着增减)。视图的显示也是内存中的内容,在OnDraw中,不断的将内存中的内容描绘到窗口上。
发散的想一下,可以把文档想象成是数据源,数据源不一定来自本地文件,它也可能来自网络,比如,你写了一个软件,界面上有一个树形控件,表示某个组织,组织中有成员,你可以手动操作树形控件,添加,删除组和成员,操作的结果通过网络发送到远程的服务器上,在服务器上被保存到数据库中。
这个C/S架构的场景中,树形控件可以被看做视,远程服务器上的数据库可以被看做文档(数据源),同时,你在客户端也许需要定义一些自己的集合类来暂存数据在内存中,因为也许另外的用户进行了添加,删除组和成员的操作,他的操作被发往服务器,服务器更新数据库后,会广播给各个在线的客户,当然也会通知到你,这时,你的内存数据也要更新。
从这里我们不难看出,一个稍微大点的软件,需要我们掌握以下的基本技能:
1.熟悉某种开发语言的基本特性(C++,java等)。
2.熟悉集合库(比如C++的STL,java的集合类等)。
3.熟悉某种数据库(SQL Server,MySql等)操作(数据库的连接,增删查改等)。
4.熟悉界面编程(Win32, WTL, MFC, java平台的SWT等)。
5.熟悉网络编程(IOCP Socket编程,UDP和TCP协议的理解等)。
如果我们不是天才或是毕业后有较好的机遇的话,一般短时间内难以达到这样的程度,至少需要3-5年的时间吧。然而,当你对上面的技术都能比较熟练的运用的时候,你会感到找到一点软件开发的感觉了。这就要我们平时多思考,多实践。
这里想着重提一下的是集合类很重要,我们用它来持有对象。STL或java的集合类,都提供了基本的数据结构,如(Map,List等),通过这些基本的数据结构,我们可以任意扩充出高级的数据结构比如树。
拿上面的组和成员树结构例子来说,我们就可以通过CMap这样来定义它的结构:
//组信息
typedef struct _GROUP_INFO_
{
int iGroupID;
int iFatherID;
TCHAR tcGroupName[255];
}GROUP_INFO, *LPGROUP_INFO;
//组员信息
typedef struct _PERSON_INFO_
{
enum PERSON_STATUS
{
PERSON_OFFLINE,
PERSON_ONLINE
};
int iPersonID;
TCHAR tcPersonName[255];
int iGroupID;
PERSON_STATUS eStatus;
}PERSON_INFO, *LPPERSON_INFO;
CMap <int, int, GROUP_INFO,GROUP_INFO&> m_mapGroupID2GroupInfo;
CMap <int, int, PERSON_INFO,PERSON_INFO&> m_mapGroupID2PersonInfo;
另外,我觉得离散数学里的集合和关系章节也很重要,当我们在根据业务逻辑定义数据结构的时候,往往需要找到对象间的关系,是一对一,一对多,还是多对一关系,分析清楚了关系,我们才好根据基本的集合类来定义符合业务逻辑的数据结构。
提问和评论都可以,用心的回复会被更多人看到
评论
发布评论
相关文章