当前位置:  技术问答>java相关

高手请进,有关MVC(模型-视图-控制器)设计的讨论

    来源: 互联网  发布时间:2015-11-05

    本文导语:  现在看面向对象的书,讲到设计一般都会提到MVC分离的原则,可到具体的实现,各种编程工具举出来的例子往往不是那么回事,常常令人困惑,特在此抛砖引玉,希望大家说出自己的高见。为了把事情说清楚,篇幅有...

现在看面向对象的书,讲到设计一般都会提到MVC分离的原则,可到具体的实现,各种编程工具举出来的例子往往不是那么回事,常常令人困惑,特在此抛砖引玉,希望大家说出自己的高见。为了把事情说清楚,篇幅有点长,请大家耐心点。
举一个简单的例子,比如有一个雇员数据库管理系统,实现对雇员的雇佣、信息修改、退休或解聘的管理。
按照MVC的原则,先确定一个雇员类(Employee),它包括雇员号(emp_no)、姓名(name)、受雇时间(hire_date),部门号(dept_no)、电话(phone)、级别(job_grade)等属性,并通过employ(),modifyInfo(),retire()等方法来实现系统的功能。为了输入或显示雇员信息,定义一些界面类employFrame、modifyInfoFrame,retireFrame,在这些界面类中接受用户的请求后,分别调用Employee类的方法实现将输入的数据保存到数据库中或者显示雇员的信息。这些界面类不直接与数据库打交道,不直接执行SQL语句。具体的对数据库的操作也不在雇员类的方法中实现,而是专门定义一些数据管理的类,在雇员类的方法中调用数据管理类的方法实现数据库的存取。
在一些编程工具的例子则往往是先定义一些窗口,在窗口上放置直接访问数据库的对象,这些访问数据库的对象中包含操作数据库的SQL语句,通过这些对象实现对雇员信息的插入删除修改。象这样直接访问数据库的对象,具体的例子有Jbuilder中的JDBTable + DataSet,PowerBuilder中的数据窗口。
两相比较,无论在设计还是实现上,第二种方案当然简单快捷,但第二种方案业务逻辑划分不清楚,软件复用比较难。而第一种方案对设计水平要求比较高,实现起来也很麻烦,如果雇员类的属性比较多,为了将界面类中接收的数据传递给雇员类,雇员类的方法employ(),modifyInfo(),retire()的参数也会很多。另外数据管理类的设计也比较难。
在实际开发中,不知道大家采用那种方案,其理由是什么,请大家发表高见。
以上两种方案是我在学习面向对象设计后的一些初浅的认识,如果有不对的地方,也请大家指出来。
这个论坛人气太旺,有一点不好就是没多久帖子就被淹没了,如果大家觉得我的问题不错的话,请帮忙顶一顶,让更多的人看到,发表高见。

|
MVC最大的特点就是逻辑清晰,代码复用性强,后续开发和代码维护方便。

由于MVC把两层变成了三层,所以在代码效率上,应该不如你所提出的第二套方案好。

我还没有参加工作,所以对实际开发应该选择那种方案没有经验。我觉得,如果是时间很紧,工程比较小,可以用第二种方案。如果工程大,用第一种方案更好,可以避免一些不必出现的错误。

|
我做游戏的,在开发过程中,不知觉得总想使用MVC结构(我对他理解不深,所有开发时是不自觉的想用,因为用的也不是java而是游戏引擎)。感觉有一个好处,就是复用性好,逻辑清晰,尤其是C/S的网络游戏,很多问题本来就很难划分Server处理还是Client处理;但总觉得效率不是很高,只觉得逻辑好。不过结果是改了又改,出来时和最开始的代码几乎完全时两码事,当然最主要还是自己水平太差。

觉得如果做超大型项目还是用MVC好,如果很小很小就用封装不好的方法算了(说是这么说,自己写代码总喜欢考虑封装,不过也封装的很失败)。

这种逻辑划分还是很麻烦的,所以小事就可以不用辛苦自己大脑了,大事应该会受益非浅,估计要是划分不清几乎很难扩充和往下走的。

|
发到设计模式讨论比较好,这里帖子沉得快

|
同一楼上的说法,我在实际工作中两种方案都用过,感觉应该根据时间松紧和项目大小来定。

    
 
 

您可能感兴趣的文章:

 
本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。












  • 相关文章推荐
  • epoll多路复用模型的疑惑,请高手解答
  • 高手,高手,高高手请进!
  • 有熟悉EXIM的高手高手么??
  • to 高手:学java应该怎样一步步学习,从菜鸟到高手.
  • 高分请高手,高手定能解决
  • 请问高手在linux中用什么命令可以做linux的启动盘???在等待高手??
  • 有高手研究Agent++麽?里面有个thread.h,蛮难读的,请高手指点
  • 难道高手区里的人就是高手?
  • 在dos下用bc31挑战高手******开发mssql程序,连接时报link err:undefined symbol GETNOTE in module DBEXTERN?(挑战高手)
  • 真正的linux高手,请看过来,看你符合高手标准不?
  • 难道这没有高手吗?难道这没有乐于助人的高手?(高分酬谢62+50+50)
  • 关于我对linux高手用yum,非高手用源码的理由
  • 高手救命,很急——ORACLE817安装在UNIXWARE711上,手工启动数据库后在netasst中连接错误,高手帮我看看?
  • 请教高手lvs的奇怪问题,我挺着急,希望高手别潜水,就就我,先谢谢了
  • 各个高手看看这个问题!本人第一次学习java所以要各位高手的帮助。。
  • :请教高手,小弟打印width=1500,height=600(A3纸)的Applet,在预览中是该区域是黑的,打印出来也是黑的,请教高手解决一下
  • 请教高手,小弟打印width=1500,height=600(A3纸)的Applet,在预览中是该区域是黑的,打印出来也是黑的,请教高手解决一下
  • 我是新手,高手,高手,快来救我
  • EJB问题,请教高手(非高手莫进)
  • 请各位JAVA高手,网业高手看过来,我把能给的分都送出!!!只能给37分,哎!!
  • eWEEK沙龙征集高手座谈


  • 站内导航:


    特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

    ©2012-2021,,E-mail:www_#163.com(请将#改为@)

    浙ICP备11055608号-3