zoukankan      html  css  js  c++  java
  • 考勤系统之MVC

    MVC 是一种使用 MVC(Model View Controller 模型-视图-控制器)设计创建 Web 应用程序的模式:
    • Model(模型)表示应用程序核心(比如数据库记录列表)。
    • View(视图)显示数据(数据库记录)。
    • Controller(控制器)处理输入(写入数据库记录)。

     MVC开始是存在于桌面程序中的,M是指业务模型,V是指用户界面,C则是控制器,使用MVC的目的是将M和V的实现代码分离,从而使同一个程序可以使用不同的表现形式。

    MVC 模式同时提供了对 HTML、CSS 和 JavaScript 的完全控制。
    Model(模型)是应用程序中用于处理应用程序数据逻辑的部分。
      通常模型对象负责在数据库中存取数据。
    View(视图)是应用程序中处理数据显示的部分。
      通常视图是依据模型数据创建的。
    Controller(控制器)是应用程序中处理用户交互的部分。
      通常控制器负责从视图读取数据,控制用户输入,并向模型发送数据。
    MVC 分层有助于管理复杂的应用程序,因为您可以在一个时间内专门关注一个方面。例如,您可以在不依赖业务逻辑的情况下专注于视图设计。同时也让应用程序的测试更加容易。
    MVC 分层同时也简化了分组开发。不同的开发人员可同时开发视图、控制器逻辑和业务逻辑。

    Model

    package com.kaoqing.model;
    
    public class User {
            private int JobID;
            private String  Name;
            private String  sex;
            private String  birthday;
            private String  department;
            private String  role;
            private String  password;
    
    
        public User(int jobID, String password) {
            JobID = jobID;
            this.password = password;
        }
    
        public User(int jobID, String name, String sex, String birthday, String password) {
            JobID = jobID;
            Name = name;
            this.sex = sex;
            this.birthday = birthday;
            this.password = password;
        }
    
        public User(int jobID, String name, String sex, String birthday, String department, String role, String password) {
            JobID = jobID;
            Name = name;
            this.sex = sex;
            this.birthday = birthday;
            this.department = department;
            this.role = role;
            this.password = password;
        }
    
        public int getJobID() {
            return JobID;
        }
    
        public void setJobID(int jobID) {
            JobID = jobID;
        }
    
        public String getName() {
            return Name;
        }
    
        public void setName(String name) {
            Name = name;
        }
    
        public String getSex() {
            return sex;
        }
    
        public void setSex(String sex) {
            this.sex = sex;
        }
    
        public String getBirthday() {
            return birthday;
        }
    
        public void setBirthday(String birthday) {
            this.birthday = birthday;
        }
    
        public String getDepartment() {
            return department;
        }
    
        public void setDepartment(String department) {
            this.department = department;
        }
    
        public String getRole() {
            return role;
        }
    
        public void setRole(String role) {
            this.role = role;
        }
    
        public String getPassword() {
            return password;
        }
    
        public void setPassword(String password) {
            this.password = password;
        }
    }
    View Code

    Controller

    package com.kaoqing.controller;
    
    import com.kaoqing.mapper.AttendMapper;
    import com.kaoqing.mapper.UserMapper;
    import com.kaoqing.model.User;
    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.stereotype.Controller;
    import org.springframework.web.bind.annotation.GetMapping;
    import org.springframework.web.bind.annotation.RequestParam;
    
    import javax.servlet.http.HttpServletRequest;
    
    @Controller
    public class UserController {
        @Autowired
        private UserMapper userMapper;
    
        @Autowired
        private AttendMapper attendMapper;
        @GetMapping("/xx")
        public String find(@RequestParam(name="name")String name,
                            HttpServletRequest request){
    
            request.getSession().setAttribute("user", userMapper.getuser(name));
            request.getSession().setAttribute("aaa", true);
            return "1";
        }
    
        @GetMapping("/update1")
        public String update1(@RequestParam(name="o1")int o1,
                              @RequestParam(name="o2")String o2,
                              @RequestParam(name="o3")String o3,
                              @RequestParam(name="o4")String o4,
                              @RequestParam(name="o5")String o5,
                              HttpServletRequest request){
    
            User user=new User(o1,o2,o3,o4,o5);
            userMapper.update1(user);
            request.getSession().setAttribute("u", true);
            return "2_1";
        }
    
        @GetMapping("/update2")
        public String update2(@RequestParam(name="o1")int o1,
                              @RequestParam(name="o2")String o2,
                              @RequestParam(name="o3")String o3,
                              @RequestParam(name="o4")String o4,
                              HttpServletRequest request){
            for(int n:userMapper.getID())
            {
                if(o1==n){
                    if (!o2.equals(userMapper.getPaw1(o1))){
                        request.getSession().setAttribute("wc", false);
    
                        return "2_2";
                    }
                }
            }
            if(o3.equals(o4)){
                User user=new User(o1,o3);
                userMapper.update2(user);
                request.getSession().setAttribute("wc", true);
                return "2_2";
            }else if(!o3.equals(o4))
            {
                request.getSession().setAttribute("qwe", false);
                return "2_2";
            }
            request.getSession().setAttribute("wc", false);
    
            return "2_2";
        }
    
        @GetMapping("/xxx")
        public String findX(@RequestParam(name="name")int name,
                           HttpServletRequest request){
    
            request.getSession().setAttribute("user",attendMapper.getID(name));
            return "1";
        }
    
    
    }
    View Code

    View

    MVC模式有许多优点:

    耦合性低
    视图层和业务层分离,这样就允许更改视图层代码而不用重新编译模型和控制器代码,同样,一个应用的业务流程或者业务规则的改变只需要改动MVC的模型层即可。因为模型与控制器和视图相分离,所以很容易改变应用程序的数据层和业务规则。
    模型是自包含的,并且与控制器和视图相分离,所以很容易改变应用程序的数据层和业务规则。如果把数据库从MySQL移植到Oracle,或者改变基于RDBMS数据源到LDAP,只需改变模型即可。一旦正确的实现了模型,不管数据来自数据库或是LDAP服务器,视图将会正确的显示它们。由于运用MVC的应用程序的三个部件是相互独立,改变其中一个不会影响其它两个,所以依据这种设计思想能构造良好的松耦合的构件。
    重用性高
    随着技术的不断进步,需要用越来越多的方式来访问应用程序。MVC模式允许使用各种不同样式的视图来访问同一个服务器端的代码,因为多个视图能共享一个模型,它包括任何WEB(HTTP)浏览器或者无线浏览器(wap),比如,用户可以通过电脑也可通过手机来订购某样产品,虽然订购的方式不一样,但处理订购产品的方式是一样的。由于模型返回的数据没有进行格式化,所以同样的构件能被不同的界面使用。例如,很多数据可能用HTML来表示,但是也有可能用WAP来表示,而这些表示所需要的命令是改变视图层的实现方式,而控制层和模型层无需做任何改变。由于已经将数据和业务规则从表示层分开,所以可以最大化的重用代码了。模型也有状态管理和数据持久性处理的功能,例如,基于会话的购物车和电子商务过程也能被Flash网站或者无线联网的应用程序所重用。 
    生命周期成本低
    MVC使开发和维护用户接口的技术含量降低。
    部署快
    使用MVC模式使开发时间得到相当大的缩减,它使程序员(Java开发人员)集中精力于业务逻辑,界面程序员(HTML和JSP开发人员)集中精力于表现形式上。
    可维护性高
    分离视图层和业务逻辑层也使得WEB应用更易于维护和修改。
    有利软件工程化管理
    由于不同的层各司其职,每一层不同的应用具有某些相同的特征,有利于通过工程化、工具化管理程序代码。控制器也提供了一个好处,就是可以使用控制器来联接不同的模型和视图去完成用户的需求,这样控制器可以为构造应用程序提供强有力的手段。给定一些可重用的模型和视图,控制器可以根据用户的需求选择模型进行处理,然后选择视图将处理结果显示给用户。
     
    除此之外,也有一些缺点:
    没有明确的定义
    完全理解MVC并不是很容易。使用MVC需要精心的计划,由于它的内部原理比较复杂,所以需要花费一些时间去思考。同时由于模型和视图要严格的分离,这样也给调试应用程序带来了一定的困难。每个构件在使用之前都需要经过彻底的测试。
    不适合小型,中等规模的应用程序
    花费大量时间将MVC应用到规模并不是很大的应用程序通常会得不偿失。
    增加系统结构和实现的复杂性
    对于简单的界面,严格遵循MVC,使模型、视图与控制器分离,会增加结构的复杂性,并可能产生过多的更新操作,降低运行效率。
    视图与控制器间的过于紧密的连接
    视图与控制器是相互分离,但却是联系紧密的部件,视图没有控制器的存在,其应用是很有限的,反之亦然,这样就妨碍了他们的独立重用。
    视图对模型数据的低效率访问
    依据模型操作接口的不同,视图可能需要多次调用才能获得足够的显示数据。对未变化数据的不必要的频繁访问,也将损害操作性能。
    一般高级的界面工具或构造器不支持模式
    改造这些工具以适应MVC需要和建立分离的部件的代价是很高的,会造成MVC使用的困难。
  • 相关阅读:
    209. Minimum Size Subarray Sum
    208. Implement Trie (Prefix Tree)
    207. Course Schedule
    206. Reverse Linked List
    205. Isomorphic Strings
    204. Count Primes
    203. Remove Linked List Elements
    201. Bitwise AND of Numbers Range
    199. Binary Tree Right Side View
    ArcGIS API for JavaScript 4.2学习笔记[8] 2D与3D视图同步
  • 原文地址:https://www.cnblogs.com/sonofdemon/p/13100712.html
Copyright © 2011-2022 走看看