程序=算法+数据结构
html
浏览器是别人的程序,作为web工程师,所做的内容就是提供浏览器所需要的结构,即html
后端MVC - ssh
html在大部分情况下具有一定的通用性,如分页,不同信息的相同格式的展示,此时,url具有两种意义
1.静态资源
包括zip,png,script,css等
2.动态服务
如.asp,.jsp,.php,.action等
此处以url为视角,url代表动态资源与动态服务
在动态服务中,目的是提供html(结构)
但依然由算法与结构组成
此时结构为
1.M
程序所需的数据的集合即动态数据
常见的数据包括
- req的参数,如cookie,body,query,甚至dataType等
- 数据库数据
- 缓存
- 内存,常说的写死
- 配置参数
....
2.V
应该为视图,正常情况下应该为swing/gui等程序的展示部分
在后端mvc中,"不存在"view,目的是获取html结构,性质上类似于函数获取一个模型
只是这个模型交给浏览器处理后可以得到显示
对web程序来讲,可以理解为html的模板部分,即模型模板
如果原生自带,则为固定的语法如swing/gui等
如果为其他特殊特殊语法(框架提供),即对原生语法的封装,针对html的性质,此处统称模板
V具有固定的性质,即语法需要或框架需要,此处也一并列为结构中
常见的V包括
- jsp
- asp/aspx
- vm
各种怎么看怎么样html的混合语法
算法为
3.C
在算法中计算所需的M,并对M与V进行关联
如spingMVC例子
@RequestMapping("/show")
public String show(Map map){
User user =new User();
map.put("user", user);
user.setAge(20);
p.setName("MVC");
return "show";
}
无论怎么描述,后端MVC,都是弱js甚至是无js的结构
即后端MVC本身对js的使用,无要求
MVP与MVVM
不存在,利用事件和交互是处理C的依据
1.url具是短连接
2.区别于其他程序,本质只是单纯的提供html
3.提供html这一行为,没有事件或交互的概念
js
html+js是web前端的程序
以js为开发语言,页面为最终产品,动态数据通过远程通讯的方式进行获取,这就是以前端为主的框架
此时,js/html/css就是开发语言,相对于后端mvc,最明显的是开发语言的变更
前端MVC
最早的前端工程/框架,主要解决模块开发(参考使用前和框架提供的目录结构,以及其他包含GUI语法所要求的结构进行理解),顺带解决作用域,注入生命周期,提供开发思路等一系列其他问题
如Backbone,Ext等
一定会涉及到对目录结构的定义,以及描述结构之间如何进行通讯,主要目的依然是产生html,业务逻辑的交互参考事件
此时结构为
1.M
程序所需的数据的集合即动态数据
常见的数据包括
- 后端诗句
- 缓存/localstorage等前端缓存
- 用户输入
- 内存,常说的写死
等等
2.V
相对于后端,更为丰富
- 前端模板语法
如handlebars,_.template - js对象
如ext系列,最终可能会包含tpl等模板相关的语法,但会封装到尽量让人看不见,即js代替html的,去html思路 - 特殊模板
基于元数据开发的前端,结构一般为json,局限性大,可以理解成大插件
基于生成器生成的模板,类似于cli
基于其他结构生成的V,利用webpack进行解析,如jsx
基于其他结构生成的V,不需要解析,应用在各种轻应用,如小程序(这个算特殊浏览器)
总之,业务开发时使用的是框架需要的格式,而最终生成的则是浏览器需要的格式(html)
此时算法为
- C
在生命周期内(初始化时)关联V与C
其他动态交互依然利用事件
前端MVVM
将V与C的绑定内容抽象为VM在V中进行描述,并进行动态的关联即为VM
关键点在自动更新
在MVC中M与V的关系也可以体现在V中(单指初始化),参考jsp,asp,handlebars,_.template等模板系列的语法
关键点在关联的Model的更新,是需要事件(开发人员)主动重新渲染V还是自动(框架)渲染
此时结构功能参考MVC,甚至V的语法都可直接参考
算法为
- VM
配合框架,自动调用
优势为自动调用,减少开发对dom的依赖
劣势为高频dom无力
即
MVC中,M与V的关系可以在初始化中进行描述,但对于后续事件中,C对V有所有权限,会怎么处理由开发人员决定
MVVM中,VM是与V与C关系的抽象,开发人员通过修改VM达到修改V的目的,不可以直接操作V
而高频很难抽象出VM
前端MVP
面向id的MVC
V与M不进行实例依赖,而通过接口的方式进行注入依赖,即面向接口,类似的观点有ioc等
V是GUI系列中,尤其是面向对象语言中的一个具体的对象,而在前端,view最终是一个结构(html)
只要通过id(或其他固定选择器)寻找具体的dom,且不通过标签,位置等视图属性获取即可,对前端而言意义不大