vc/mfc程序开发,关于界面与逻辑分离问题
原贴地址
http://community.csdn.net/Expert/topic/4249/4249906.xml?temp=.3769953
对于这个问题,在这里我小结一下,希望对大家开发程序有些帮助,不怕大家拍砖批评
看到过太多的程序把业务逻辑代码放在CView或是CDialog中进行处理,
太多的初始化都放在OnInitialUpdate或是OnInitDialog中
这让我很想不通.
为什么这样说呢?因为CDialog也好,CView也好,再进一步说CFrame,他们都是一个形式上的VIEW
我们应该都知道MVC模型,GOF也特地把MVC单独拉出来在第一章中进行了讲解。
VIEW的职责仅仅是显示数据,数据哪里来?从相应的Model中取出来
换句话说,VIEW是不具备修改数据的能力。
更不应该将逻辑代码放在VIEW中了。
那马上就有人问那我该把逻辑初始化放在什么地方?
答案也是很显而易见的,CXXXApp::InitInstance()才是程序的"入口点",整个程序在CXXXApp::InitInstance()中加载frame和dialog,而我们应该在这之前就需要加载业务逻辑对象,而绝对不是在OnInitialUpdate或是OnInitDialog中。不要被mfc所蒙蔽。更加彻底的应该是去除InitInstance()中的操作,由自己的逻辑来控制整个流程。
大家都知道,mfc中的DOCUMENT-VIEW中的VIEW已经集成了MVC中V和C,所谓的C就Contrller控制器,控制器的职责是负责接收输入并将消息发送给相应的MODEL,CView,CDialog都可以接收鼠标键盘的消息,又何必麻烦来搞个Controller呢?其实随着程序的复杂性增加,Controller的作用也越将凸现,对于那些动态更换界面更是不可或缺。至于Controller的重要性我就不多说了,可以查看GOF相应的章节。如果有疑问,可以发表您的观点。
其实上来说了那么多MVC的问题,只是想让大家意识到平时一贯的操作中还存在大量不合理的地方,包括MFC的设计上。
在j2ee中,jsp只是作为view,通过el和tag来取相应javabean中的数据,而servlet则是一个典型的controller,负责分派消息,而javabeans则当然是model
jsp中不应该存在业务逻辑,不应该知道其他的jsp页面,它只是负责显示,jsp是不知道servlet的存在的。
servlet则不会取访问数据库,只是处理相应的表现层逻辑,对用户的输入进行解析分派。
javabean则完全不知道jsp,servlet的存在,是一个被动对象,可以很方便的移植到一个swing程序中去。
为什么要说jsp,j2ee?大家都是做vc/mfc的,但不能把自己的思路局限在mfc中,多看看周围的变化发展。
面对当前的敏捷开发,可能vc/mfc的开发者的反应是属于迟缓的一类了,并且vc/mfc开发的程序员也很难融入到开源的大环境中去。在做vc/mfc的同时一定要开阔自己的视野,但其中也是困难重重,vc/mfc决定很难做单元测试,很难重构,很难自动测试,那么可以借助于.net,vc2005来学习新的开发方式。
更为重要的是,我们要去学习面向对象方法,看些理论,不是会用mfc就会面向对象的,看到论坛很多贴上来的代码是非常缺乏面向对象开发基础的。在当今强调面向组件,面向服务,AOP的时候,还对面向对象含含糊糊,后面的路会越走越累。
千万不要因为语言工具的关系,拒绝优秀的思想,书籍和方法。
先写这么多,大家也多谈谈。