博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
关于MVC的一些思考
阅读量:5377 次
发布时间:2019-06-15

本文共 1159 字,大约阅读时间需要 3 分钟。

        最近在检查项目代码的时候,发现有很多人并不能完全理解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了。

转载于:https://www.cnblogs.com/qmsu/p/5418922.html

你可能感兴趣的文章
一站式规划linux基础学习线路
查看>>
flask-SQLAlchemy的ORM
查看>>
第八次作业
查看>>
C# 计时器写法
查看>>
编程便笺:代码的图形(二)
查看>>
ulimit小结
查看>>
使用mediaquery自制栅格系统初探
查看>>
位操作
查看>>
007 Python基础
查看>>
CSS 3 过渡效果之jquery 的fadeIn ,fadeOut
查看>>
通过 FTP 从 Windows 向 Linux 拷贝文件之后,文件的权限很可能会变化,要检查
查看>>
MySQL数据库解决乱码 latin1 转 gbk
查看>>
Kafka 配置安装
查看>>
EGORefreshTableHeaderView学习
查看>>
c3p0配置详解(转载)
查看>>
你觉得你在创业,但其实你可能只是在做小生意而已 制定正确的计划 创业和经营小企业之间的差异...
查看>>
使用word2vec训练中文词向量
查看>>
hdoj 1226 超级password 【隐图BFS】
查看>>
cmd 控制台 提示:请求的操作须要提升!
查看>>
IOS自动化打包介绍
查看>>