A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

谁讲一下MVC原理和举个简单的例子啊  最好在带上DAO

12 个回复

倒序浏览

回帖奖励 +10

本帖最后由 李京 于 2012-9-8 00:11 编辑

我对MVC的理解就是类似三层架构,但是又不一样,三层架构是种模式,MVC是种结构,内容分层,各部分关联较小,易于合作。
MVC是 模型(Model),视图(View)和控制(Controller)的缩写,其目的实现Web系统的职能分工。
模型层就是底层,用于实现系统中的业务逻辑。
视图层就是顶层,界面嘛。
控制层就是中间层,不同的界面操作调用不同的底层代码,不同的底层代码返回中间层,又出现不同的界面。

Dao层叫做数据访问层。

好比主板上内存坏了,我换内存,没必要连主板一起换。我不用知道内存是哪家生产,不用知道多大容量,只要是内存都可以插上这个接口使用。这就是MVC的意义。

MVC的一个形象的例子,我要去买一辆奔驰车,那么我先要去4S店,那么这个店面就是控制层,他不会关心车子是什么制造的,只管提供车给我。那么车厂就是SERVICE层,他只管拼装车子,把车提供给4S店,如何拼装车子呢?通过更多的零件厂商来提供,那么这些零件厂商就是DAO层。
回复 使用道具 举报

回帖奖励 +10

这是哪的内容?
回复 使用道具 举报

回帖奖励 +10

顶一个!
回复 使用道具 举报

回帖奖励 +10

抢钱来咯
回复 使用道具 举报

回帖奖励 +10

MVC三层分别是MOdel:模型层,Controler:控制层,View:视图层
控制层:用来控制业务逻辑
视图层:用来显示数据
模型层:用来存储操作数据
个人理解
回复 使用道具 举报

回帖奖励 +10

学习了!
回复 使用道具 举报

回帖奖励 +10

互相调用,学习中~~~~
回复 使用道具 举报

回帖奖励 +10

MVC 这个是非常经典的架构。有时间我来总结一下发来给大家分享,不过期望都别太高额,我只是简单的总结一下MVC的基础原理,不会说的太多的,因为真要讲起来的,是需要花太大的功夫的,就那样也不能保证会误导一大笔孩子的。还是就楼主的意思我简单的回复就好了 呵呵。
回复 使用道具 举报
  MVC全名是Model View Controller,是模型(model)-视图(view)-控制器(controller)的缩写,一种软件设计典范,用于组织代码用一种业务逻辑和数据显示分离的方法,这个方法的假设前提是如果业务逻辑被聚集到一个部件里面,而且界面和用户围绕数据的交互能被改进和个性化定制而不需要重新编写业务逻辑MVC被独特的发展起来用于映射传统的输入、处理和输出功能在一个逻辑的图形化用户界面的结构中。
         MVC开始是存在于Desktop程序中的,M是指数据模型,V是指用户界面,C则是控制器,使用MVC的目的是将M和V的实现代码分离,从而使同一个程序可以使用不同的表现形式。比如一批统计数据可以分别用柱状图、饼图来表示。C存在的目的则是确保M和V的同步,一旦M改变,V应该同步更新。 
  模型-视图-控制器(MVC)是Xerox PARC在二十世纪八十年代为编程语言Smalltalk-80发明的一种软件设计模式,已被广泛使用。后来被推荐为Oracle旗下Sun公司Java EE平台的设计模式,并且受到越来越多的使用 ColdFusion 和 PHP 的开发者的欢迎。模型-视图-控制器模式是一个有用的工具箱,它有很多好处,但也有一些缺点。

案例:(之前我看过的一些案例中选择的)
定义一个交通工具(Vehicle)的类,其中有:
属性:速度(speed),体积(size)等等

方法:移动(move()),设置速度(setSpeed(int speed)),加速speedUp(),减速speedDown()等等.

最后在测试类Vehicle中的main()中实例化一个交通工具对象,并通过方法给它初始化speed,size的值,并且通过打印出来。另外,调用加速,减速的方法对速度进行改变。

(这就是几个简单的案例需要注意的是接下来的分工步骤就是MVC的简单实现)

public class Vehicle //实体类 model +控制器controller
{
        private String name;
        private String brand;
        private String color;
        private int number;
       
        public Vehicle(String name;String brand;String color;String number)
        {
                this.name=name;
                this.brand=brand;
                this.color=color;
                this.number=number;
        }
       
        public String getName()
        {
                return name;
        }
       
        public String getBrand()
        {
                return brand;
        }
       
        public String getColor()
        {
                return color;
        }
       
        public String getNumber()
        {
                return number;
        }
       
        public void setName(String name)
        {
                this.name=name;
        }
       
        public void setBrand(String brand)
        {
                this.brand=brand;
        }
       
        public void setcColor(String color)
        {
                this.color=color;
        }
       
        public void setNumber(String number)
        {
                this.number=number;
        }

        public void jiasu()
        {
                System.out.println("加速!");
        }
        public void jiansu()
        {
                System.out.println("减速!");
        }
        public void move()
        {
                System.out.println("移动!");
        }
        public void stop()
        {
                System.out.println("停止!");
        }

        public void toString(){
                System.out.println("名字"+getName()+"品牌"+getBrand()+"颜色"+getColor+"车牌号"+getNumber());
        }
       
}


class Truck extends Vehicle  //实体类 model +控制器controller
{
        private int speed;
       
        public Vehicle(String name;String brand;String color;String number,int speed)
        {
                super(name;brand;color;number);
                this.speed=speed;
        }
       
        public int getSpeed()
        {
                return speed;
        }
       
        public void setSpeed(int speed)
        {
                this.speed=speed;
        }
       
        public void move()
        {
                System.out.println("移动!");
        }
        public void stop()
        {
                System.out.println("停止!");
        }

        public void toString(){
                System.out.println("名字"+getName()+"品牌"+getBrand()+"颜色"+getColor+"车牌号"+getNumber()+"车速"+getSpeed());
        }
       
        public static void main(String args[]) //显示类一般是给用户提供需求信息的部分叫 view
        {
                Vehicle v = new Vehicle("名字","品牌","颜色","车牌号");
                Truck t = new Truck("名字","品牌","颜色","车牌号",60);
                v.toString();
                t.toString();
        }
}


编写Java程序,用于显示人的姓名和年龄。
定义一个人类(Person),该类中应该有两个私有属性,姓名(name)和年龄(age)。定义构造方法,用来初始化数据成员。再定义显示(display)方法,将姓名和年龄打印出来。
在main方法中创建人类的实例,然后将信息显示。

public class Person() {  //model
String name;
int age;
String sex; //或者用int表示:如0表示男 1表示女
List<Person> msg = new ArrayList<Person>();

person(String name,int age,String sex){
  this.name = name;
  this.age = age;
  this.sex = sex;
}

public void add(Person p) { //controller
  msg.add(p);
}
public static void main(String[] args) { //view
  
}
}

定义一个名为Vehicles(交通工具)的基类,该类中应包含String类型的成员属性brand(商标)和color(颜色),还应包含成员方法run(行驶,在控制台显示“我已经开动了”)和showInfo(显示信息,在控制台显示商标和颜色),并编写构造方法初始化其成员属性。
编写Car(小汽车)类继承于Vehicles类,增加int型成员属性seats(座位),还应增加成员方法showCar(在控制台显示小汽车的信息),并编写构造方法。
编写Truck(卡车)类继承于Vehicles类,增加float型成员属性load(载重),还应增加成员方法showTruck(在控制台显示卡车的信息),并编写构造方法。
在main方法中测试以上各类。

public class Vehicles {  //实体类 模型(Model)
         private String brand;
         private String color;
         
          //构造方法
          public Vehicles(String brand, String color) {
                    
                    this.brand = brand;
                    this.color = color;
          }
         
          public void run() {
                   System.out.println("我已经开动了");
          }
         
          public void showinfo() {
                    System.out.println("商标: "  +  brand);
                    System.out.println("颜色: "  +  color);
          }
}
//保存为Vehicles.java
//特定车辆car子类
public class Car extends Vehicles { //操作类 控制器(controller)
            
               private  int seats;
               //构造方法
               public Car(String brand, String color, int seats) {
                       super(brand, color);
                       this.seats =  seats;
               }
                public void showCar() {
                      super.showinfo();
                      System.out.println("座位: "  + seats + " 个");
               }
}

//保存为 Car.java
public class Truck extends Vehicles {  //操作类 控制器(controller)
            
             private float load;
             
             public Truck(String brand, String color, float load) {
                       
                           super(brand, color);
                           this.load = load;
             }
             
             public void showTruck() {
                          
                           super.showinfo();
                           System.out.println("载重 :" + load + "吨");
             }
}

//保存为Truck.java

public class Test {// 视图(View)           主要显示结果的
  public static void main(String[] args) {
                     
                      Vehicles vehicle = new Vehicles("奥迪", "黑色");
                      vehicle.showinfo();
                     
                      Car car = new Car("桑塔纳", "红色", 5);
                      car.showCar();
                     
                      Truck truck = new Truck("解放", "蓝色", 10);
                      truck.showTruck();
                   }
}

//保存为 Test.java

把这个四个文件放在一个目录下,
在cmd中输入
javac Test.java
java Test
回复 使用道具 举报

回帖奖励 +10

抢钱,哈哈哈!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
回复 使用道具 举报
MVC 是个好的思维架构,其实它有优点也有缺点:
  优点:
             耦合性低 、重用性高、生命周期成本低、部署快、可维护性高、有利软件工程化管理; 
      缺点:  
            没有明确的定义、不适合小型,中等规模的应用程序、增加系统结构和实现的复杂性、视图与控制器间的过于紧密的连接、      视图对模型数据的低效率访问、一般高级的界面工具或构造器不支持模式。

目前这种新式还不是非常的稳定,就因为他没有一定的标准,在一个实体类中都能分出三层,最后把他们分在不同的文件中就成了架构,这是最土的理解。可在实际项目中三层还需要其它的要素,而且三层架构目前的发展是需要个合理的分割规定,微软的mvc架构更新的很快而且这几年他们把mvc都提升到了一个高性能的水准,我希望懂mvc的架构师们把这些内容多总结一下最好能出个流行的架构模版那样估计这个标准会贴近开发。

还有目前就我的开发感觉MVC 这个理念开发中是需要的,但是实际开发中是很混乱的,好多时候真的不是那么容易整合的,所以我们开发一些中小型的软件很少听到会用到mvc的。及使说用也是那种非常简单的分个文件夹,其实我看过微软新的mvc架构,就感觉原来mvc是那么的强,可是那样的标准还是需要权威的体制来推出的。java的发展我希望也会更强的具体的发展着。
回复 使用道具 举报

回帖奖励 +10

mvc是一种分层的思想,可以增强程序的可维护性
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马