Angular的MVC理解--节自Adam Free的Pro angularv2
1. 定义
Angular的核心是采用MVC模式,即Model-View-Controller,也即MVW,Model-View-Whatever.
如下图所示,借助于ASP.NET的MVC模式来描述这三者关系:
Model:负责管理数据,有领域数据和视图数据,维护数据的管理逻辑和存储;
View:负责数据展示,如页面展示布局和页面数据,显示样式等;
Controller:是数据和视图的转换体;负责接收请求,然后进行数据的业务逻辑处理,和生产页面展示逻辑返回给View;
对应于Angular里面的叫法,如下图所示:
其中:
Model <---------> Model
View <----------> Template
Controller <--------->Component
各模块的主要功能同MVC一致;
2. 理解Model
Model包括两部分数据,一部分叫View Model,仅仅指从Component里传递给Template的数据,用户能看到的展示数据(比如Template只看到的数组,字符串等);该部分数据是为方便component于template的交互而使用;
另一部分即,领域数据,纯粹的跟应用所解决的商业领域相关的数据;包括对这些数据的创建,处理,存储,转换等维护逻辑;
注意:模型即数据,同时也包括对这部分数据的创建和管理逻辑;
对MVC模型来说,模型应该包括和不应该包括如下几点:
应该包括:
- 领域数据;
- 创建、管理和修改这些领域数据的业务逻辑(即使这会意味着需要通过web service执行远程逻辑)
- 提供干净的API接口,给用户获取数据和操作接口;
不应该包括:
- 暴露数据的获取和管理的细节(即数据的存储机制或者远程web service调用不应该暴露给controllers和views)
- 基于用户交互的变换模型数据的业务逻辑(这是component即controllers的职责)
- 将模型数据展示给用户(这是views的职责)
将模型和视图和控制器独立开来的好处是,模型可以独自进行单元测试,使得应用更简单和维护方便。最好的模型应该包括对该部分数据的业务操作逻辑,像CRUD和CQRS操作;
对前端的模型来说,模型中包含的数据的处理逻辑更多的知识通过Restful webservice触发后端(服务端)的数据库操作;比如SportsStore例子中的repository模型,里面就有很多ajax访问服务端的逻辑;
3.理解Component/controller
Controller即Angular里的Component,是Template和Model的连接纽带;它包括一些对数据的业务逻辑处理(注意是业务逻辑,不是创建、存储等CRUD逻辑)并负责将这部分数据发送给View;
它应包括:
- 建立template初始状态的逻辑
- 包括template展示model数据给用户的逻辑或行为
- 包括基于用户交互而带来的对模型数据更新的逻辑或行为
不包括:
- 操作DOM的逻辑(这是template的职责)
- 模型数据的持久化的逻辑(这是model的逻辑)
4. 理解Views/Templates
Views即Angular中的templates,它通过数据绑定来定影Html的元素和展示需要;数据绑定技术使得Angular非常灵活,它能转换Html元素,得以成为动态网页应用的基础。
Template应该包括:
- 将数据展示给用户端的标记和逻辑
不应该包括:
- 复杂的逻辑(那最好放在component中,或者angular的其他建造块中,像directives,services或者pipes)
- 对领域数据的CRUD操作(这是Model的职责)
5.MVC设计中的常见陷阱和原则
主要的陷阱是把对数据的逻辑处理放错了位置,下面是常见的三个放错位置的情况:
- 把业务逻辑放在Templates,而不是Components;
- 把领域逻辑放在Components,而不是Models;
- 当应用RESTful service时,把数据存储逻辑放在客户端的Model,而不是服务端的Model里。
逻辑处理的位置放置需要一定的开发经验,一般的原则如下:
- Template的逻辑一般是仅仅为展示而准备数据,并且从不修改数据;
- Component逻辑从不直接创建,更形或删除领域Model的数据;
- Templates和Components应该从不直接访问数据存储(如数据库访问);
Angular的MVC理解--节自Adam Free的Pro angularv2的更多相关文章
- 带你初识Angular中MVC模型
简介 MVC是一种使用 MVC(Model View Controller 模型-视图-控制器)设计模式,该模型的理念也被许多框架所吸纳,比如,后端框架(Struts.Spring MVC等).前端框 ...
- ASP.NET MVC 理解MVC模式
ASP.NET MVC 理解MVC模式 PS:MVC出来很久了,工作上一直没机会用,所以我也没去学.出于兴趣,工作之余我将展开对MVC的深入学习,通过博文来记录所学所得,并希望能得到各位园友的斧正. ...
- Java框架-Spring MVC理解001
Spring MVC理解 1.servlet--Spring MVC的本质 2.Spring MVC其实是一个工具,具体的理解可以分为两步:第一步,了解这个工具是怎么创建出来的:第二步,了解这个工具是 ...
- MVC理解(全程白话不拽词)
我所发的所有博客只为了给想干程序员,但是基础没有或者很差,刚入职场的人 所有的观点不一定准确,我不懂的或者不理解的都会备注出来 先说MVC MVC理解为:M = Model = 数据库表里面每 ...
- MVC 理解小谈
1. 如何理解MVC MVC 是一种经典的设计模式,全名为 Model-View-Controller,即 模型-视图-控制器. 其中,模型 是用于封装数据的载体,其本质是一个普通的 Java Bea ...
- Android进阶笔记07:Android之MVC 理解
1. 为什么需要MVC ? 软件中最核心的,最基本的东西是什么? 答:是的,是数据.我们写的所有代码,都是围绕数据的. 围绕着数据的产生.修改等变化,出现了业务逻辑. 围绕着数 ...
- PHP笔记09:PHP之 MVC理解
1. 首先通俗地说说我对MVC的理解: Model是负责干活的,它干的活主要是从数据库中获取需要的数据以及对获取的数据按照业务逻辑进行加工处理,至于为什么要干某件活,何时干某件活它一概不管,而这正是C ...
- angular directive 深入理解
由于业务的需要,最近angular 的diretive 研究的比较多,有和同事一起共同协作开发scada的项目, 对directive 有了进一步更深的理解. 感觉才开始真正理解了这句话的意思: In ...
- angular的promise理解
promise承诺是angular的一个重点部分,是一种异步处理值(或非值)的方法.一般程序是从上至下执行,遇到某个地方需要花点时间,就干等着把这个地方执行完了,才继续做下一个,看着有点笨蛋.而pro ...
随机推荐
- 【EF6学习笔记】(五)数据库迁移及部署
原文地址:Code First Migrations and Deployment 原文主要讲两部分:开发环境下数据库迁移到其他数据库服务器:以及在Azure上如何部署应用: 迁移数据库 原文前面讲一 ...
- iOS逆向开发(5):微信强制升级的突破 | 多开 | 微信5.0
接下来的几篇文章,小程以微信为例,实战地演示一下:如何注入iOS的APP.其中使用到的知识,基本在前面的文章中都有介绍到. 小白:小程,我想用回旧版本的微信! 小程:为什么要用旧版本微信呢? 小白:你 ...
- linux 命令 — lsof
lsof 列出打开的文件 输出 FD: 文件描述符,cwd表示应用程序当前工作目录,txt表示打开的是程序代码(二进制文件或者共享库),0标准输入,1标准输出,2错误流 TYPE:DIR目录,CHR字 ...
- Disconf源码分析之启动过程分析上(1)
Disconf的启动,主要是包括两次扫描和XML非注解式配置,总共分为上下两篇,上篇先主要介绍第一次静态扫描过程. 先从入口分析,通过Disconf帮助文档,可以看到xml必须添加如下配置. < ...
- Linux软件包管理之yum在线管理
目录 1.yum在线管理 2.网络 yum 源 3.光盘 yum 源搭建步骤 ①.挂载光盘 ②.让网络 yum 源失效 ③.修改光盘yum源文件 ④.输入yum list 可以查看光盘yum源里面的软 ...
- python 时间模块time,datetime
模块(module)是 Python 中非常重要的东西,你可以把它理解为 Python 的扩展工具.换言之,Python 默认情况下提供了一些可用的东西,但是这些默认情况下提供的还远远不能满足编程实践 ...
- bash内置命令mapfile:读取文件内容到数组
bash提供了两个内置命令:readarray和mapfile,它们是同义词.它们的作用是从标准输入读取一行行的数据,然后每一行都赋值给一个数组的各元素.显然,在shell编程中更常用的是从文件.从管 ...
- Django 系列博客(七)
Django 系列博客(七) 前言 本篇博客介绍 Django 中的视图层中的相关参数,HttpRequest 对象.HttpResponse 对象.JsonResponse,以及视图层的两种响应方式 ...
- ABP适配Oracle全过程
一.背景 ABP的各类文档在网络上已经非常完善了,唯独缺少与oralce相关的资料,ABP官网也未给出一个较好的Oracle解决方案.正好最近在学习ABP相关知识,对ABP源码结构稍算熟悉,花了些 ...
- @Html.xxxxxFor() 规范写法
@Html.TextBoxFor() 讲解(其他类似的 @Html.LabelFor 等)同理 @Html.TextBoxFor(model => model.SearchParams.Name ...