MVC

MVC - 维基百科,自由的百科全书

MVC 是软件工程的一种软件架构模式,它不是具体的技术,而是一种代码分层的理念,主要体现了职责分离原则。

M-Model 模型

V-View 视图

C-Controller 控制器

对 MVC 的误解及缘由

误解:页面视图 = View ,Entity 和 Dto = Model

缘由:因为刚入坑程序员职业的时候,接触的是 ASP.NET Web Form 项目,而 ASP.NET Web Form 对于 Controller 和 View 的职责并没有很好的规划和定义,所以自己就很粗暴的把页面视图认为是 View 层。View 页面散列在各个 Controller 之下,虽竭力将文件夹命名清晰,但因为 Model 没有很好的实现,Dto乱飞,数据访问代码在 Controller 随处可见,某些 Controller 文件中代码堆积,各种逻辑全在 Controller 层。

尝试优化:将 View 归置到一个文件夹之下,将 Entity 和 Dto 独立类库,分出数据访问层 DataAccess 和 业务逻辑层 Business ,通用方法层 Common

项目结构大概是

  • Demo.Web

    • Views
    • Controllers
  • Demo.Entity
  • Demo.Dto
  • Demo.DataAccess
  • Demo.Business
  • Demo.Common

不太完美的结果:优化之后代码结构比之前的要清晰许多,Controller 放数据绑定代码和对参数的XSS校验和Sql注入校验。但是新的问题出现,数据库字段变动或者业务调整,Model 层的改动涉及到了 Entity、Dto、DataAccess、Business。在此不作 ASP.NET Web Form 和 ASP.NET MVC 的优劣比对。

MVP

MVP 是 MVC 模式的延伸,不是替代品。

P:Presenter

Presenter 包含着组件的事件处理,负责检索 Model 获取数据,和将获取的数据经过格式转换与 View 进行沟通。

摘自 Model-view-presenter - 维基百科,自由的百科全书

在我看来 Presenter 层应该是被包含在 Business 层,因为规划时对 Business 层的部分职责预想和上述引用完全一致。因为没有更具体地规划 Presenter ,所以后期项目中 Business 层和 Controller 层中参杂了本应由 Presenter 层承担的职责代码,降低了项目的可维护性。

MVVM

MVVM有助于将图形用户界面的开发与业务逻辑后端逻辑(数据模型)的开发分离开来,这是通过置标语言或GUI代码实现的。MVVM的视图模型是一个值转换器,[1] 这意味着视图模型负责从模型中暴露(转换)数据对象,以便轻松管理和呈现对象。在这方面,视图模型比视图做得更多,并且处理大部分视图的显示逻辑。[1] 视图模型可以实现中介者模式,组织对视图所支持的用例集的后端逻辑的访问。

摘自 MVVM - 维基百科,自由的百科全书

ViewModel 作为中介者,屏蔽了数据绑定过程代码和GUI代码,借助 XMAL 标记语言可以轻松完成复杂的 GUI 展示。WPF 的强大不用多说。

在此推荐两个按照 MVVM开发模式的开源项目

加深对于 MVC、MVP、MVVM 的概念理解的更多相关文章

  1. Android App的设计架构:MVC,MVP,MVVM与架构经验谈

    相关:http://www.cnblogs.com/wytiger/p/5996876.html 和MVC框架模式一样,Model模型处理数据代码不变在Android的App开发中,很多人经常会头疼于 ...

  2. MVC, MVP, MVVM比较以及区别(上)

    MVC, MVP和MVVM都是用来解决界面呈现和逻辑代码分离而出现的模式.以前只是对它们有部分的了解,没有深入的研究过,对于一些里面的概念和区别也是一知半解.现在一边查资料,并结合自己的理解,来谈一下 ...

  3. MVC, MVP, MVVM比较以及区别

    MVC, MVP和MVVM都是用来解决界面呈现和逻辑代码分离而出现的模式.以前只是对它们有部分的了解,没有深入的研究过,对于一些里面的概念和区别也是一知半解.现在一边查资料,并结合自己的理解,来谈一下 ...

  4. 浅析前端开发中的 MVC/MVP/MVVM 模式

    MVC,MVP和MVVM都是常见的软件架构设计模式(Architectural Pattern),它通过分离关注点来改进代码的组织方式.不同于设计模式(Design Pattern),只是为了解决一类 ...

  5. 前端mvc mvp mvvm 架构介绍(vue重构项目一)

    首先 我们为什么重构这个项目 1:我们现有的技术是前后台不分离,页面上采用esayUI+jq构成的单页面,每个所谓的单页面都是从后台胜场的唯一Id 与前端绑定,即使你找到了那个页面元素,也找不到所在的 ...

  6. Android App的设计架构:MVC,MVP,MVVM与架构AAAAA

    1. 架构设计的目的1.1 通过设计使程序模块化,做到模块内部的高聚合和模块之间的低耦合.1.2 这样做的好处是使得程序在开发的过程中,开发人员只需要专注于一点,提高程序开发的效率,并且更容易进行后续 ...

  7. android MVC && MVP && MVVM分析和对比

    相关:http://www.cnblogs.com/wytiger/p/5305087.html 出处http://blog.csdn.net/self_study,对技术感兴趣的同鞋加群544645 ...

  8. [转]MVVM架构~mvc,mvp,mvvm大话开篇

    MVP 是从经典的模式MVC演变而来,它们的基本思想有相通的地方:Controller/Presenter负责逻辑的处理,Model提供数据,View负 责显示.作为一种新的模式,MVP与MVC有着一 ...

  9. [1] MVC & MVP &MVVM

    开发架构之MVC & MVP & MVVM  

  10. 用户界面编程模式 MVC MVP MVVM

    用户界面编程模式 MVC MVP MVVM 程序 = 数据 + 算法 数据:就是待处理的东西 算法:就是代码 涉及到人机交互的程序,不可避免涉及到界面和界面上显示的数据原始方式是界面代码和逻辑代码糅合 ...

随机推荐

  1. 困扰的问题终于解决了-docker时区不正确的问题修改记

    前一阵子有一台服务器,mysql的时间比北京时间晚了8个小时.我知道是时区的问题,但是不知道为什么弄成这样,宿主机没有问题,后来一看mysql的docker,时区是错的. mybatis-plus打印 ...

  2. H3C NAPT配置举例

  3. vue-learning:1 - 为什么选择vue

    为什么选择Vue 通过一个对比,展示vue框架的优势: 需求:根据请求后端接口返回的数据列表,渲染在页面中. 传统上我们使用jQuery的Ajax发送http请求,获取数据.判断列表数据是否存在,如果 ...

  4. 2018-8-10-C#-写系统日志

    title author date CreateTime categories C# 写系统日志 lindexi 2018-08-10 19:16:53 +0800 2018-2-13 17:23:3 ...

  5. 前端js页面跳转

    window.location.Reload() //刷新当前页面self.location=document.referrer;通过Request Headers中Referer获得上个页面的地址并 ...

  6. oracle 查询含clob 字段慢

    项目中使用Oracle 查询表数据感觉特别慢,一秒只能查询十条记录. 刚开始以为是全表扫描的问题,加上索引 生效后,查询还是很慢. 表中只有三个字段,其中一个是clob,于是推测,是不是查询字段的原因 ...

  7. Visual Studio Team Services and Team Foundation Server官方资料入口

    Team Foundation Server msdn 中文文档入口 Visual Studio Team Services or Team Foundation Server www.visuals ...

  8. jQuery无new创建对象原理

    // jQuery 无new 创建对象套路 (function(g,undefined){ var foo = function(){ return new foo.fn.init(); }; foo ...

  9. 微信支付-小程序H5 公众号 Payment SDK

    前言 今天是2020年一天,去年最后一个月开发了订单和支付系统,尤其在支付系统和微信对接的时候遇到了很多坑,这里给大家总结下,以免大家遇到相同的问题还浪费大量时间 微信支付前期准备 微信商户号,需要商 ...

  10. 最小化centos7.4系统静默安装oracle12.2

    一 orace简介 ORACLE(甲骨文)公司.Oracle Database (甲骨文数据库) 是一个具有对象和可扩展标记语言(XML)功能的关系数据库,提供的以分布式数据库为核心的一组软件产品,是 ...