zoukankan      html  css  js  c++  java
  • 关于MVC的一些思考

            最近在检查项目代码的时候,发现有很多人并不能完全理解MVC,有些以为使用了面向对象就是MVC,有些将很多M层的东西写在了C层,从而造成了C层相当的臃肿,所以这里将我对MVC的一些总结写下来,仅供大家参考。

            现在软件开发很多框架都使用的是MVC模式,M指的是模型,V是视图,C是控制器,MVC的目的就是使M和V分离,也就是将视图层和数据层进行解耦,提高代码的复用性。C存在的目的是确保M和V的同步,一旦M改变了,V也要相应的改变。
    MVC的详细分工如下:
    Model(模型)负责在数据库中存取数据。主要囊括了整个项目中的数据、业务逻辑和业务规则。通常,M层是MVC中代码量最大的,逻辑最复杂的,关于业务的大量业务逻辑也是在这里表示。M层一般要对输入的数据进行过滤、验证和规范化处理。M层可以提供有结构的数据,数组结构、队列结构、乃至其他Model等。 只要是与业务有关的都应该放在M层而不是C层,C只是简单的处理M与V层的关系。M的复用度在MVC中是最高。
    View(视图)依据模型数据创建的,主要是将数据呈现在用户面前,一般以HTML为主。V层一般没有复杂的判断语句,只有简单的循环格式化语句;而且V层也不会直接改写M层;V层用的数据都是直接拿来用的数据。
    Controller(控制器)负责从视图读取数据,控制用户输入,并向模型发送数据。如从M层查询数据,然后组装一定成格式的数据传给V层。C层就是火车站售票员,从数据库里取出数据组成火车票,然后交给V层。C层用于决定使用哪些Model,对Model执行什么操作,然后为视图准备哪些数据。所以像request相关的数据就应该放在C层,C层不对数据进行任何预处理,这些操作应该放在M层。
           
            由于我们公司使用的是yii2框架,所以这里以yii2为例进行说明。
            在项目中,是先有数据库再有model,通常最小单元的model就是根据数据库表生成的model,这种model在yii2中一般是继承了Active Record。
            比如订单情景,如order(订单)表和goods(商品)表。对于平时简单的展示等功能,这两个model还是够用的。但是涉及到商品的添加、审核等复杂的功能时就不够用了。既然不够用我们就要扩展这个model。在添加商品的时候我们要对添加商品的表单进行验证,这个功能只有在添加表单的时候才使用,对于其他的时候是没用的,所以我们不能直接在goods这个model上添加,这个时候我们可以使用继承的方式:
    public class GoodsForm extends goods {}
    当在添加、修改商品的时候,我们就可以使用GoodsForm这个model了。
  • 相关阅读:
    [TensorFlow]TensorFlow安装方法
    [Linux]CentOS与终端破墙
    [JavaScript,Java,C#,C++,Ruby,Perl,PHP,Python][转]流式接口(Fluent interface)
    ROS中阶笔记(十一):ROS 2.0
    ROS中阶笔记(十):ROS机器人综合应用
    ROS中阶笔记(九):Movelt!机械臂控制
    ROS中阶笔记(八):机器人SLAM与自主导航—机器人自主导航
    ROS中阶笔记(七):机器人SLAM与自主导航—SLAM功能包的使用
    ROS中阶笔记(六):机器人感知—机器语音
    ROS中阶笔记(五):机器人感知—机器视觉
  • 原文地址:https://www.cnblogs.com/qmsu/p/5418922.html
Copyright © 2011-2022 走看看