MVC是架构模式,而不是设计模式
最早学编程的时候看过一些书,印象深刻的一本书《设计模式解析》,那本书给我后来的工作提供了很大的帮助。
他叫我站在问题模型的立场上指定解决方法,也教会了我软件设计中每个问题都可以细化到到不可再分割的原子性。
在那书以后看到过一些设计模式的书出现。由于本人比较崇尚于权威或者说正统性的学术性书籍,没怎么看其他本书。
最近一些年在网上看到过一些博客中把MVC说成设计模式,这个说法是错误的,MVC实际是软件架构模式。
笔者可以毫不客气的说,工作几年以后,有一些人说MVC是设计模式,基本上是滥竽充数的程序员。
因为mvc并没有设计模式中那种问题场景原型,他是一个软件架构的泛化思想模型,比如工厂模式他可以解决需求更新时频繁
维护方法代码,只要传入参数,他就给你对象,比如java中的用class.forname来装载类。
笔者读书不多,对于MVC的粗浅理解如下,供大家参考:
MVC是一种软件架构模式,他模拟人类社会分工,通过分工协作来完成一件事,完成这件事可能需要很多种工种,这里我们可以把
这些工作按角色来理解,理解成软件中的各个层。
比如一个工程项目,公司老板安排设计人员去做标书,标书做完投标,然后把工程转给技术部项目经理,项目经理安排技术人员去安装,
技术人员安装好以后反馈给项目经理,项目经理向老板汇报这个标已经完成,至此一个项目结束。
这个流程中:安排、转、汇报几个词语大概反应了一个完整项目中各个角色之间交互的特点,即任务调度及分发,以及
任务结果反馈。
一个项目中如果用到了mvc架构模式,不管项目大小,按群体/角色/职责分工大概有Model层,Controller层,View层。
Model可以理解为基层,做一些苦力,基础性的工作。
Controller可以理解为管理层,他们通常负责下发命令、调度任务
View层可以理解为用户界面及用户交互层。
我们刚刚举例的工程项目中:老板、项目经理他们是Controller层,一个是下发命令,一个调度任务
其中设计部角色 以及技术人员他们是Model层,他们是做基础工作的,他们这一层有一些粗糙的接口,可以和其他角色的人
来交流反馈任务结果。
篇博客临时有点想法,算是吐槽,关于View层笔者没有想到详细的描述方式。
在软件MVC架构中,我们的Model,View,Controller层大家都能划分清楚吧,网上教程很多。
笔者的理解是,不管项目中有没有MVC框架,合理的MVC框架设计应该遵循以下原则:
M层数据持久层,负责与数据库通信,这一层包含数据模型实体类,以及一些CRUD方法。
C层主要负责调度任务,得到V层需求下发命令,最多出现的应该是把任务转发给其他类处理。
例如
DataStoreBLL dbll = new DataStoreBLL();
dbll.doSave(Entity entity){
DataStoreDAL dbal = new DataStoreDAL();
dbal.doSave(entity);
}
实际数据持久化任务通过BLL转发给DAL来处理,BLL只得到处理结果。
C层不应该出现数据库操作代码,例如jdbc的getConnection
View层负责与用户交互,展示处理结果给用户看,可以是web ui,cui,gui,app ui等
各个层之间通信应依赖于抽象(接口或者抽象类)。
转载于:https://www.cnblogs.com/passedbylove/p/9191554.html
MVC是架构模式,而不是设计模式相关推荐
- MVC+MVVM架构模式
一.MVC设计/架构/编程模式 1.MVC设计/架构/编程模式是什么 MVC是一种使用MVC设计创建WEB应用程序的模式,把WEB应用分为三个基本部分: 模型(Model) - 表示应用程序核心(数据 ...
- MVC架构模式详细说明
一.简介: 架构模式是一个通用的.可重用的解决方案,用于在给定上下文中的软件体系结构中经常出现的问题.架构模式与软件设计模式类似,但具有更广泛的范围. 模型-视图-控制器模式,也称为MVC模式(Mod ...
- 什么是MVP架构模式(Model、View、Presenter)?(软件设计模式MVC、MVVW)
View: 是显示数据(model)并且将用户指令(events)传送到presenter以便作用于那些数据的一个接口.View通常含有Presenter的引用.在Android开发中通常将Activ ...
- Android 四大组件 与 MVC 架构模式
作为一个刚从JAVA转过来的Android程序员总会思考android MVC是什么样的? 首先,我们必须得说Android追寻着MVC架构,那就得先说一下MVC是个啥东西! 总体而来说MVC不能说是 ...
- iOS 架构模式--解密 MVC,MVP,MVVM以及VIPER架构
2019独角兽企业重金招聘Python工程师标准>>> 本文由CocoaChina译者lynulzy(社区ID)翻译 作者:Bohdan Orlov 原文:iOS Architect ...
- iOS-【转载】架构模式 - 简述 MVC, MVP, MVVM 和 VIPER
看了很多篇关于 iOS 架构模式的,尤其是关于 MVVM 的,都是似懂非懂,无意看见了这篇,发现总结的很到位,很用心,特转载至此,如果英语好,请看原文 iOS Architecture Pattern ...
- iOS-【转载】架构模式 - 简述 MVC, MVP, MVVM 和 VIPER (译)
看了很多篇关于 iOS 架构模式的,尤其是关于 MVVM 的,都是似懂非懂,无意看见了这篇,发现总结的很到位,很用心,特转载至此,如果英语好,请看原文 iOS Architecture Pattern ...
- iOS 架构模式 - 简述 MVC, MVP, MVVM
Make everything as simple as possible, but not simpler - Albert Einstein,把每件事,做简单到极致,但又不过于简单 - 阿尔伯特· ...
- iOS 架构模式 - 简述 MVC, MVP, MVVM 和 VIPER (译)
在使用 iOS 的 MVC 时候感觉怪怪的?想要尝试下 MVVM?之前听说过 VIPER,但是又纠结是不是值得去学? 继续阅读,你就会知道上面问题的答案 - 如果读完了还是不知道的话,欢迎留言评论. ...
最新文章
- deepin/ubuntu安装苹方字体
- 2018 ACM ICPC Asia Regional - Seoul B.Cosmetic Survey
- ACMer的AC福音!手动扩栈外挂!(防止栈溢出)
- 无悔入华夏怎么一直显示服务器,无悔入华夏新手开局玩法 无悔入华夏新手攻略开局带的...
- mysql 5.5 升级_Windows下MySQL5.5升级MySQL5.7
- OSS开源软件是什么
- 程序员的遗憾:为什么我没早学数据分析?
- python使用-python使用
- input[type=radio]自定义样式
- pmp 第4章 错题整理(不定时更新)
- 计算机专业学生学校活动,校园IT文化节活动策划方案
- 大型网站的演化之路——读《大型网站技术架构》
- android aar管理,android 库依赖管理之一aar依赖
- eclipse 中 svn 代码报错如下 org.apache.subversion.javahl.ClientException:Filesystem has no item
- html轮播鼠标悬停效果,jQuery图片轮播加悬停效果
- 「macOS无法验证此APP不包含恶意软件」的处理方式
- oracle括号不区分中英,oracle查询不含括号及不含指定字符的方法
- win10 office2021+mathtype安装配置
- Excel2010分成两个或者多个独立窗口
- MATLAB去读网页源码时中文乱码
热门文章
- binary - 从(向)二进制串插入和提取字段 / BINARY FORMAT BINARY SCAN
- 国内up300.net网盘无法使用的解决办法
- mysql workbench简单操作
- CSS3 Media Query:移动 Web 的完美开端
- mongdb 群集_通过对比群集分配进行视觉特征的无监督学习
- R语言——str函数
- linux misc device字符杂项设备驱动
- 收入和贷款有什么关系?
- 希望我不会“伤心至死”
- iOS酷我音乐导出工具使用说明和原理介绍(提供下载链接及工程源码)