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. gyp verb check python checking for Python executable "python2" in the PATH

    缺少python2.7支持 可快速使用以下语句完成安装 npm install --global --production windows-build-tools 到时候会自动下载python的 如果 ...

  2. [转]爬虫 selenium + phantomjs / chrome

    目录 selenium 模块 安装 phantomjs 浏览器 安装 chromedriver 接口 安装 对比两个接口 整合使用 基本实例 常用属性方法 定位节点 节点操作 其他操作 实例解析 - ...

  3. H3C 通配符掩码的应用示例

  4. 【a602】最大乘积

    Time Limit: 1 second Memory Limit: 32 MB [问题描述] 一个正整数一般可以分为几个互不相同的自然数的,如3=1+2,4=1+3,5=1+4=2+3,6=1+5= ...

  5. 1471 - Defense Lines

    After the last war devastated your country, you - as the king of the land of Ardenia - decided it wa ...

  6. 2019-8-31-git-通过-SublimeMerge-处理冲突

    title author date CreateTime categories git 通过 SublimeMerge 处理冲突 lindexi 2019-08-31 16:55:59 +0800 2 ...

  7. 2018-9-20-断点调试-Windows-源代码

    title author date CreateTime categories 断点调试 Windows 源代码 lindexi 2018-09-20 17:37:55 +0800 2018-05-1 ...

  8. H3C 主机名与IP地址映射需求

  9. linux 安装一个共享的处理者

    共享中断通过 request_irq 来安装就像不共享的一样, 但是有 2 个不同: SA_SHIRQ 位必须在 flags 参数中指定, 当请求中断时. dev_id 参数必须是独特的. 任何模块地 ...

  10. Linux 内核class_simple 接口

    class_simple 接口意图是易于使用, 以至于没人会抱怨没有暴露至少一个包含设备的被 分配的号的属性. 使用这个接口只不过是一对函数调用, 没有通常的和 Linux 设备模型 关联的样板. 第 ...