当前位置: 技术问答>java相关
有关MVC(模型-视图-控制器)设计的讨论
来源: 互联网 发布时间:2015-11-04
本文导语: 现在看面向对象的书,讲到设计一般都会提到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的原则,先确定一个雇员类(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()的参数也会很多。另外数据管理类的设计也比较难。
在实际开发中,不知道大家采用那种方案,其理由是什么,请大家发表高见。
以上两种方案是我在学习面向对象设计后的一些初浅的认识,如果有不对的地方,也请大家指出来。
|
参考strut开发http://jakarta.apache.org/,
|
参数太多的话,可以用list或map来进行传递
设计模式本来就是需要有能力比较高的设计人员来
设定,然后交给水平低一些的程序员来具体实现,
通常来说,使用设计模式来进行设计,刚开始的
时候,所花的工夫是大于不采用设计模式的,如果
你的程序以后不是经常需要修改或升级的话,没有
必要采用,是否使用一项技术,不一定只看那项技术
是否先进,还要看是否和自己的具体情况吻合。
设计模式本来就是需要有能力比较高的设计人员来
设定,然后交给水平低一些的程序员来具体实现,
通常来说,使用设计模式来进行设计,刚开始的
时候,所花的工夫是大于不采用设计模式的,如果
你的程序以后不是经常需要修改或升级的话,没有
必要采用,是否使用一项技术,不一定只看那项技术
是否先进,还要看是否和自己的具体情况吻合。
|
没有这个必要吧。如果我们把范围划大一点,Frame相当于view,数据库就相当于document;而管理类呢?就是SQL呀!就是一个统一的管理界面,只是没有单独区分出来而已。