vc/mfc程序开发,关于界面与逻辑分离问题

nonocast 2005-10-12 07:45:17
加精
原贴地址
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的时候,还对面向对象含含糊糊,后面的路会越走越累。
千万不要因为语言工具的关系,拒绝优秀的思想,书籍和方法。
先写这么多,大家也多谈谈。
...全文
3429 55 打赏 收藏 转发到动态 举报
写回复
用AI写文章
55 条回复
切换为时间正序
请发表友善的回复…
发表回复
tsys2000 2005-10-18
  • 打赏
  • 举报
回复
c#和vb没有doc/view只有form

c#和vb采用的是什么模型?

我用cdialog的子控件化,模拟form,感觉这样写,比较简单.
zxyjyzxyjy 2005-10-18
  • 打赏
  • 举报
回复
好贴,收藏
nonocast 2005-10-18
  • 打赏
  • 举报
回复
如果最好要总结一下的话,那么我想说
对于编码一定要牢牢掌握,反复实践针对接口编程,不要针对实现体来编写代码
对于开发过程来说最好可以采用单元测试+重构+持续集成,如果有能力采用XP当然是最好
对于个人来说一定要好学,有责任心,努力,为理想为事业奋斗
对于团队来说我们要培养有合作精神,自动自发,强烈责任感的队伍
对于公司来说要么不做,要做就做最好的,哪怕只是一个螺丝

感谢诸位的讨论
尤其是羽战士,以及mythma,vcleaner和天外流星等csdner的参与
nonocast 2005-10-18
  • 打赏
  • 举报
回复
算了算了,反正MVC,OO只不过是一种技术,总会有淘汰的一天,范不着为了这个坏了感情
技术毕竟只是技术,真正起决定作用的还是人,否则敏捷永远只是一句中国笑话
angel_rabbit 2005-10-18
  • 打赏
  • 举报
回复
up 一下~
关注中...
nonocast 2005-10-18
  • 打赏
  • 举报
回复
厉害
这次我长见识了
一个是是说面向对象已经淘汰,一个说根本就不需要方法,更别说面向对象了
我由衷佩服 jdzwq(重生的痛)和codesphere(codesphere)
codesphere 2005-10-18
  • 打赏
  • 举报
回复
那么烦干什么啊?代码写了就写了,只要能写出PROJECT来,用的没的问题就行唠,多快好省,写得越乱越好,人家都看不懂,就你能维护,最好连注释也不用写唠,反正最后交一个EXE给人家就行赖
xxrl 2005-10-18
  • 打赏
  • 举报
回复
先mark一下 回去看
葫芦鬼 2005-10-17
  • 打赏
  • 举报
回复
很有启发,mark
pomelowu 2005-10-17
  • 打赏
  • 举报
回复
好,那咱就不要在这个帖子里掐。你要真想当喉舌,我开贴子奉陪。
jdzwq 2005-10-17
  • 打赏
  • 举报
回复
pomelowu(羽战士)太抬举我了,没有你,我还真当不了喉舌...
pomelowu 2005-10-17
  • 打赏
  • 举报
回复
>我就喜欢鄙视那些信口开河,拿思想当真理的人
楼上的不要只破不立啊,思想没有用,那什么有用,劳烦您给指条明路啊。
ps,思想和实践的辩证关系,没必要说太多吧。“拿思想当真理”,我还真没看出来除了我,其他发言的谁有这个倾向。

>楼主说“我们讲究中庸之道,但绝对不是平庸之道”,我看来看去,都没有看到哪里中庸,哪里不
>平庸了,那我只好再鄙视一下了
言之无物,不痛不痒,你没有去当喉舌真是可惜了。
jdzwq 2005-10-17
  • 打赏
  • 举报
回复
楼主说我态度不好,说得对啊,我就喜欢鄙视那些信口开河,拿思想当真理的人
楼主说“我们讲究中庸之道,但绝对不是平庸之道”,我看来看去,都没有看到哪里中庸,哪里不平庸了,那我只好再鄙视一下了...
nonocast 2005-10-16
  • 打赏
  • 举报
回复
羽战士的那个稍复杂了些
如果要举一个MVC的例子,其实现实生活中就有很多,关键在于观察

PS2主机就是MODEL,电视机就是VIEW,手柄就是CONTROLLER

因为三者间的接口定义清晰确切,所以不同的厂商可以根据各自的规范生产出互相兼容的产品,就那么简单
我开GT,可以用手柄,也可以用方向盘就是这个道理。MODEL只是处理相应的数据,他不管你是手柄还是方向盘,他也不知道外面是电视机还是显示器。

最后想说一句 jdzwq(重生的痛) 的态度不太好,我们也是讨论问题,我们不要花时间去争论,把时间精力放在问题上,看看有没有更加好的解决方法,如果有,请举例。
pomelowu 2005-10-16
  • 打赏
  • 举报
回复
我指 jdzwq(重生的痛)
pomelowu 2005-10-16
  • 打赏
  • 举报
回复
楼上的语气实在不像是在讨论问题。
也罢,我没举例子,是我的错。

就拿楼主说的MVC来说,很明显的实际生活的抽象。比如去应聘一个职位:
到了前台,跟前台MM(V)说是来应聘的。(交互事件发生)
前台MM(V)其实什么也不用管,只需要一个内线电话告诉HR(C)
HR(C)会根据你的前期条件,比如简历,决定是否跟你面谈。(判断是否响应)
HR(C)把从你那儿,通过简历、面试等方式,搜集到的信息向决策者(M)汇报。
决策者(M)分析你的数据,决定是否录用。
最后决策者(M)告诉前台MM(V),让她通知你应聘结果。(交互完成)
gison 2005-10-16
  • 打赏
  • 举报
回复
学习
jdzwq 2005-10-16
  • 打赏
  • 举报
回复
专家在和学生大谈编程思想,有个学生想向专家求个经典实例,专家说:去别跟我抬杠...
那个学生就忍不住要鄙视一下...
pomelowu 2005-10-16
  • 打赏
  • 举报
回复
直言无罪,但是直言并不一定正确。

思想、设计的重要性我想并不需要强调。楼上到底想说什么?
jdzwq 2005-10-16
  • 打赏
  • 举报
回复
整天把思想挂在嘴上的人,通常社么事都做不好!
恕我直言了...
加载更多回复(35)

16,550

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • AIGC Browser
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

试试用AI创作助手写篇文章吧