您的位置:首页 > 编程语言 > C#

我在第一次接触.NET时候随便整理的资料 .NET C# MVC

2009-09-23 11:32 531 查看
net是什么?
首先 他是一个环境.其不光可以实现开发 控制台应用程序 web 应用程序,windows应用程序,移动开发,web service开发 分布式开发 服务器与客户端开发 水晶报表开发而且将来可以实现将分布在不同地方的计算机组共同合作开发
其次 其核心 :CLR和庞大的类库.CLR(通用语言运行时)为程序运行提供服务,例如:内存管理,线程管理,代理管理,安全管理,垃圾管理,纠错功能,提升程序运行速度.
当然NET还支持非受控代码也就是其不受CLR管理,这样就不能享受CLR提供的安全 垃圾等一些服务.
第三:NET有一个庞大的野心:也是NET的设计核心概念:也就是分布式的发展 ,从单机 客户端/服务器模型 和web网站的方式向分布式方向发展,通过跨平台,与无言无关的soap协议,web服务,把各种不同功能的接口由在软件的一个部件中提升到网络上,从而实现了分布式开发,使用"服务"
第三:NET其实只有一种语言:MSIL(microsoft中间语言),但其却支持20多种语言,而且msil是开源的,也就是说只要开发出相应的转换程序 就可以支持任意的语言

框架学习:
垃圾管理 :managed Heap 受控堆
程序集:自描述的主体元数据 装载卸载方便 版本控制 dell地域 安全性:GUID 延迟签名
应用程序域比历史上进程的优点:
历史上 进程是隔绝每个应用程序的 ,如果进程间要交换数据,可以通过代理
应用程序域:1一个进程可以有多个应用程序域,这样一个应用程序域出错,不用关掉整个应用程序,只需关掉出现错误的应用程序域,然后重新加载
2一个应用程序域中的错误不会影响其他应用程序域
3一个应用程序域不能访问另一个应用程序域,可以通过拷贝应用程序域中的需要用到的对象来访问一个应用称西域(本地访问)
还可以通过代理的方法 实现远程访问
4程序集与应用程序域: 程序运行的时候先加载 程序集,可以把一些对象经常使用的封装称共享程序集,装载到一个中立应用程序域中,这样所有的程序都可以访问
加载到中立应用程序域中,而不是都加载,这样节省了内存空间
5:应用程序域与线程
1微软打算用270亿美元来传播 .net
net出发点就是分布式,
2webService就相当于是API函数,或者类的方法的接口,只不过 其不是分布在软件的不同部分中
而是分布在不同的网络上
3实现了 software as service 软件即服务 的理念
以后可以把软件分布在网络上,根据需要订购不同功能的"服务
4 soap 和 web服务 成为.net的核心
web服务定义:
是一种自描述,自包含,模块化的应用,可以为web上其他应用程序调用
web服务三大协议:
soap使用XML,这样便屏蔽了平台之间的差异 使其与平台无关,与操作系统无关
soap:简单对象访问协议:soap 提供是在分布式系统中
wsdl web服务描述语言
DISCO :web服务发现协议

优点:
1平台无关性
对于服务请求者 与 服务提供者之间的交互 被设计成完全与平台无关
,通过WSDL语言和现在平台都支持的HTTP协议来保证平台无关性
2Just in time integration 即时整合技术 DISCO确保发现服务 是自配置的,健壮的,其直接把请求服务与提供服务者绑定一起,
从而实现分布式,各人做个人的事情,而不存在一个主机了
3 封装性,使用者只需只要服务的接口 就可以使用条用服务

webService体系:
部署Deploy:将web服务部署到web上,并使用WSDL描述
发布Publish:将web服务发布到web上,服务代理(Server Broker)帮助服务提供者与服务请求者(Service Requestor)互相发现
返回:指代理处理用户请求,并返回结果,然后将请求者与服务绑定(Bind),从而使得请求者可以调用服务
面向服务的体系结构SOA:
三种角色:
Service Provider:发布服务
Service broker:注册应经发布的Service Provider 并对其进行分类,并提供搜索服务,方便Service requester查找,
Service requester:
三种操作:
publish:Service Provider 向Service broker注册自己的功能及其访问接口
find: service requester通过Service broker查找特定的功能的服务
bind:使Service requester 能够真正使用web服务功能
web 服务平台是:
XML HTTP SOAP WSDL UDDI
未来会增加的:XMAL XLANG XKMS XFS
SOAP:Simple Object Access Protocol 简单对象访问协议:
定义了传递XML数据的方式,以及如何在底层通信协议HTTP基础上执行远程调用(RPC)的方法
它有三个内容:
1XML-envelope:1定义了如何把一般信息,数据描述成xml形式的数据,信息
2远程调用的约定:RPC
3HTTP
简单的说SOAP=XML+RPC+HTTP

2UDDI:Universal Description Discovery and Integration :提供了描述 发现商业服务的框架
核心组件: UDDI商业注册,其提供的信息包含三个方面的内容:
白页:提供了地址,联系方法和已知的企业标示
黄页;提供了:基于标准分类法的行业类别
绿叶:包括了该企业所提供的Web Service的技术信息
3WSDL webService 定义语言:用于定义WebService, 描述一个WebService的功能,它在哪里,如何调用等内容
UDDI描述了一个web Service的大部分方面,而UDDI可以看做是其一个子集
怎么样A地方的用户明白B地方的web 服务是什么意思呢,这是需要共同的标准来定义
IBM与MICROSOFT都支持WSDL作为WEB SERVICE的标准语言
4XLAN:数据库中事务处理的传统概念是:原子性 也就是要么不做,要么全做,在分布式系统中维持这种概念
即使用 两项承诺的方式 处理事务;
XLAN是未来的方向:
XLAN概念:每一个动作都有一个互补的动作,例如取出100元,互补的就会存入100元,这项技术还在研究之中

例如对于这个简单的web service: 其soap:
[WebMethod(Description = "返回两个数的和")]
public int Add(int num1, int num2)
{
return num1 + num2;
}

  请求时候:
  Host是要请求的主机地址,
  length是一个变量,会根据用户输入的int 数值的长度变化
  表示请求的soap的总的字节数
POST /vs2005/WEB%20SERVICE/WebService.asmx HTTP/1.1
Host: localhost
Content-Type: application/soap+xml; charset=utf-8
Content-Length: length

<?xml version="1.0" encoding="utf-8"?>
<soap12:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soap12="http://www.w3.org/2003/05/soap-envelope">
<soap12:Body>
<Add xmlns="http://tempuri.org/">
<num1>int</num1>
<num2>int</num2>
</Add>
</soap12:Body>
</soap12:Envelope>
HTTP/1.1 200 OK
Content-Type: application/soap+xml; charset=utf-8
Content-Length: length

响应的时候:
返回结果给调用者,响应也是一个xml文件
<?xml version="1.0" encoding="utf-8"?>
<soap12:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soap12="http://www.w3.org/2003/05/soap-envelope">
<soap12:Body>
<AddResponse xmlns="http://tempuri.org/">
<AddResult>int</AddResult>
</AddResponse>
</soap12:Body>
</soap12:Envelope>

WSDL是对WeB SERVICE进行所有的描述的语言,可以让不同平台,不同的公司
能够识别web service的功能,调用方法 等等一切信息
例如下面是对 两数相加的 有关需要的参数的类型的描述部分:
WSDL是xml-shema形式的定义文件
- <s:element name="Add">
- <s:complexType>
- <s:sequence>
<s:element minOccurs="1" maxOccurs="1" name="num1" type="s:int" />
<s:element minOccurs="1" maxOccurs="1" name="num2" type="s:int" />
</s:sequence>
</s:complexType>
</s:element>
- <s:element name="AddResponse">
- <s:complexType>
- <s:sequence>
<s:element minOccurs="1" maxOccurs="1" name="AddResult" type="s:int" />
</s:sequence>
</s:complexType>
</s:element>

SOA:面向服务,与AJAX结合 可以实现一种飞跃

Web2.0技术 就是WEB SERVICE +AJAX 把网站上别人辛苦的东西 都聚集起来,用创新的思想整合成自己的网站,例如有一个网站,把baidu google 的搜索结果 都放在自己的网站上,供用户选择,这样用户就直接浏览这个网站,其他很多 ,只要很好的创新 就可以设计出赚钱的web.2.0网站
加入你有一个宏伟的网站目标,但是你一个人没有这么多经历去做,我们就可以从别人做好的比较成熟的网站上提取我们需要的功能整合起来 组织成一个网站,这就是web 2.0
AJAX不是新技术,但是 web2.0思想是新思想,只要创新就可以赚钱

Web 2.0
AJAX
RSS技术
Web service 必须要学会定制服务,所以 底层的saop相关技术要学习
实现自己的梦想必须要认真学习以上技术
例如 网站的体育新闻来自sina
不同的游戏来自不同的游戏主运行商
然后把所有的信息组织起来,一个网站整合所有的东西
可以定制页面,可以给用户提供一个桌面 :现在桌面图像化界面 什么文件夹是在电脑上面,可以把电脑的相关技术 引入互联网
例如 打开一个网页是各种 图标, 我的电脑有我的文件,完全由用户自己组织,
每一个人都有一个网络桌面,有开始菜单,对应于电脑的每一个方面都认真思考创新
都可以 与当前的电脑关联 还可以与远程的电脑关联,远程操作其他的电脑傻瓜化管理都可以 还有定制服务,还有添加功能,为用户提供服务,游戏里面的攻略
全部采用 魔兽世界的小图标,开始菜单程序放置用户定制的所有的功能
开始菜单放置用户常用,可以有虚拟桌面背景,音乐连接各大网站,每一个人都有一个管家,是客户端的形式,一起组成一个网络电脑界面,每个人都有一个家
真正让用户实现 打开一个网站 不用再打开其他任何网站,而且完全友好 由用户自己管理自己需要的东西,
1
有索引的地方都要有RSS
2
当用户输入联系人的时候 可以实现自动显示以a开头的所有人的名字,这是AJAX的一个应用
3
可以随便的拖拽,在网页上随便拖拽某个图形或者其他东西 这个也是需要的
4
网站推广:炒作不错 例如 以前 一个女的 描述一下 踩死猫,可以引起人思考的事件

AJAX设计模式”
:<拥抱变化> 这本书 有设计模式的相关内容
《人月神话》
1重构
2封装(因为不同的浏览器使用不同的AJAX原理,所以必须要把一些技术封装起来,
AJAX封装底层的一些浏览器的不同,使得开发者不用写这么if语句.微软帮我们设计号了
)
设计模式是软件开发最流行的词语,也是面试中最具诱惑的闪光点!
软件腐化的原因:--可维护性才是王道
1过于僵硬?? 相反:要使软件具有 可扩展性(新性能可以很容易加入系统)
2过于脆弱?? 灵活性(修改不会波及其它)
3复用率低??
4粘度过高?? 可插入性(新功能容易加入系统(气囊加入方向盘))
解释:
过于僵硬、过于脆弱、复用率低、粘度过高的系统都必然导致可维护性的减弱。反过来,可扩展、可插入、灵活的设计是提高可维护性的基础,但不一定能够保证可维护性。

有些人开发的系统高度灵活,所有数据库字段都可以动态添加、删除,表也可以动态构建。可以说灵活性高、可插入、可扩展性也很强。但导致代码超级复杂,读起来根本就找不到北,更不用说修改了。这时候,可维护性就显得很低。甚至在维护代码时,不小心触动一些关键部件造成系统出现问题。

有时候我提倡为开发人员写代码(注意:不是注释)。有些代码不是给客户用的,而是给开发人员用的。包括必要的错误定位工具,内部调试断点,性能计数器等等。这些代码可以帮助提高系统的可维护性。

总之,可维护性是一个综合的概念,任何人都无法预料客户需求会发生什么样的变化,“未雨绸缪”和“亡羊补牢”都是提高可维护性的一个很好切入点。测试驱动开发以及契约式开发对提高可维护性也有不少帮助。?
提高系统可复用性的几点原则:
传统复用:
1. 代码的粘帖复用
2. 算法的复用
3. 数据结构的复用
* 可维护性与可复用性并不完全一致
应用下面原则可以调高程序的可维护性:
一、 "开放-封闭"原则(OCP)
Open-Closed Principle原则讲的是:一个软件实体应当对扩展开放,对修改关闭。
二、 里氏代换原则(LSP)
Liskov Substitution Principle(里氏代换原则):子类型(subtype)必须能够替换它们的基类型。
三、?依赖倒置原则(DIP)
四、?接口隔离原则(ISP)
五、?合成/聚合复用原则(CARP)
六、?迪米特法则(LoD)
一、 "开放-封闭"原则(OCP)
要求我们在设计软件的时候,应尽可能使软件有扩展性,封闭性
Open-Closed Principle原则讲的是:一个软件实体应当对扩展开放,对修改关闭。
优点:
??? 通过扩展已有软件系统,可以提供新的行为,以满足对软件的新的需求,使变化中的软件有一定的适应性和灵活性。
??? 已有软件模块,特别是最重要的抽象层模块不能再修改,这使变化中的软件系统有一定的稳定性和延续性。
生动的例子:
例子:玉帝招安美猴王
当年大闹天宫便是美猴王对玉帝的新挑战。美猴王说:"'皇帝轮流做,明年到我家。'只教他搬出去,将天宫让于我!"对于这项挑战,太白金星给玉皇大帝提出的建议是:"降一道招安圣旨,宣上界来…,一则不劳师动众,二则收仙有道也。"
换而言之,不劳师动众、不破坏天规便是"闭",收仙有道便是"开"。招安之道便是玉帝天庭的"开放-封闭"原则。
招安之法的关键便是不允许更改现有的天庭秩序,但允许将妖猴纳入现有秩序中,从而扩展了这一秩序。用面向对象的语言来讲,不允许更改的是系统的抽象层,而允许更改的是系统的实现层。
二、 里氏代换原则(LSP)
Liskov Substitution Principle(里氏代换原则):子类型(subtype)必须能够替换它们的基类型。
反过来的代换不成立
《墨子•小取》说:"娣,美人也,爱娣,非爱美人也……"娣便是妹妹,哥哥喜爱妹妹,是因为两人是兄妹关系,而不是因为妹妹是个美人。因此,喜爱妹妹不等同于喜爱美人。用面向对象语言描述,美人是基类,妹妹是美人的子类。哥哥作为一个有"喜爱()"方法,接受妹妹作为参数。那么,这个"喜爱()"方法一般不能接受美人的实例。
三、?依赖倒置原则(DIP)
依赖倒置(Dependence Inversion Principle)原则讲的是:要依赖于抽象,不要依赖于具体。
简单的说,依赖倒置原则要求客户端依赖于抽象耦合。原则表述:
抽象不应当依赖于细节;细节应当依赖于抽象;
要针对接口编程,不针对实现编程。
反面例子:

缺点:耦合太紧密,Light发生变化将影响ToggleSwitch。
解决办法一:
将Light作成Abstract,然后具体类继承自Light。

优点:ToggleSwitch依赖于抽象类Light,具有更高的稳定性,而BulbLight与TubeLight继承自Light,可以根据"开放-封闭"原则进行扩展。只要Light不发生变化,BulbLight与TubeLight的变化就不会波及ToggleSwitch。缺点:如果用ToggleSwitch控制一台电视就很困难了。总不能让TV继承自Light吧。
解决方法二:
?
优点:更为通用、更为稳定。
结论:
使用传统过程化程序设计所创建的依赖关系,策略依赖于细节,这是糟糕的,因为策略受到细节改变的影响。依赖倒置原则使细节和策略都依赖于抽象,抽象的稳定性决定了系统的稳定性。
四、?接口隔离原则(ISP)
接口隔离原则(Interface Segregation Principle)讲的是:使用多个专门的接口比使用单一的总接口总要好。换而言之,从一个客户类的角度来讲:一个类对另外一个类的依赖性应当是建立在最小接口上的。
过于臃肿的接口是对接口的污染。不应该强迫客户依赖于它们不用的方法。
五、?合成/聚合复用原则(CARP)
合成/聚合复用原则(Composite/Aggregate Reuse Principle或CARP)经常又叫做合成复用原则(Composite Reuse Principle或CRP),就是在一个新的对象里面使用一些已有的对象,使之成为新对象的一部分;新对象通过向这些对象的委派达到复用已有功能的目的。
简而言之,要尽量使用合成/聚合,尽量不要使用继承。
六、?迪米特法则(LoD)
迪米特法则(Law of Demeter或简写LoD)又叫最少知识原则(Least Knowledge Principle或简写为LKP),也就是说,一个对象应当对其它对象有尽可能少的了解。
其它表述:
??只与你直接的朋友们通信
??不要跟"陌生人"说话
??每一个软件单位对其它的单位都只有最少的知识,而且局限于那些与本单位密切相关的软件单位。
迪米特法则与设计模式
Facade模式、Mediator模式
使民无知
《老子》第三章曰:"是以圣人之治,虚其心,实其腹,弱其志,常使民无知无欲。"使被"统治"的对象"愚昧"化,处于"无知"的状态,可以使"统治"的成本降低。
所谓"最少知识"原则,实际上便是老子的"使民无知"的统治之术。
不相往来
《老子》云:"小国寡民……邻国相望,鸡犬之声相闻,民至老死,不相往来。"将被统治的对象隔离开来,使它们没有直接的通信,可以达到分化瓦解,继而分而治之的效果。迪米特法则与老子的"小国寡民"的统治之术不谋而合。

MVC 是三个字母的缩写:
MODOL模式
controller 控制器
VIEW 视图

传统的MVC view就是网页,显示各种内容
CONTROLler控制器是 CGI 或php 或者 ASP.NET的与服务器动态交互
传统的MVC 数据流被集成到VIEW中,根据交互来显示响应的数据

AJAX中 使用MVC 设计网页 :
好处:可以实现分工操作,是未来的主流
美工的搞美工,编程的搞编程,等等

AJAX中 VIEW 作用:
提供可视化界面,负责监视界面的操作
与controller交互 来把需要的数据显示出来
VIEW举例:
例如一个网页 :设计网页的显示样式,
这个网页要显示什么,有什么控件,
至于业务逻辑完全不用懂,不用设计,只设计网页的外观
因此不需要其他知识,只需要会设计网页就可以了,
还有利用CSS来设计样式

VIEW中 不要包含逻辑部分:
<input type="button" value="hello" onclick="showresult("data.xml","name")" />
上面使用虽然正确,但是不符合MVC,因为这会给美工人员带来困惑,
正确的方法:

好的美工人员可是天才哦 就想美术家毕加索
有时候 一个网页的外表可以起到决定性的作用
所以有必要 让美工人员专业化
(也不是太好,美工人员还必须知道 onclike是什么意思,这样会使美工人员的专业化降低
但是这种方式是美工人员可以接受的)
<input type="button" value="hello" onclick="showresult()" />
然后在业务逻辑层里面 设计这样的函数
function abc (event)
{
showresult("data.xml","name");
}
美工设计人员可以只用一个函数名字,其他都不用知道,只需要知道这是一个点击事件,
一个好的美工人员应该专注于 利用已有的部件 创造出美丽的网页界面,而不用理会太多,
美工的工作越专业 有助于设计,越能创造出界面迷人的网页

最好的方法:
只需要告诉美工人员 ,这里需要一个DIV或者这里应有一个button:
<DIV ID="TEST"> 或<input type="button" id="TEST" value="hello" />
美工人员只需要会上面的就可以,连事件的表层知识都不用知道

下面完全利用AJAX知识 来写事件:
首先要获取节点:
FUNCTION ABC("TEST.XML","name")
{}
然后在window.onload中添加回调函数
var butu= document.getElementById('TEST');
butu.onclike=ABC;
//注意利用这种方法回调函数的时候,不用(),只是用函数名字

这样便进一步分工,降低美工人员的知识需求,从而可以专注研究如何使网页美工

业务逻辑层的人员设计页面的业务逻辑,这里需要一个button,需要事件,点击后会有什么功能,
设计的时候 用一个函数名字代替,然后告诉程序员这个button事件的功能,
底层的如何写这个函数 完全是 程序员的工作

这样便更好的分工:
业务逻辑人员负责设计总的业务逻辑(指明网页的显示效果,这个区域怎么显示,显示button,还是textbox',
只需要告诉美工人员需要的显示方式,至于具体设计以及css的设计不用取设计,还有还要规划业务逻辑,
把整个网页的功能规划好,)设计好之后把美工需求交给 美工人员, 一些函数的编写交给 程序员
这样 程序员 会得到一个函数名字,还有这个函数实现的功能描述,这样,业务逻辑层的人员不用具体去设计
网页的颜色显示等, 也不用取编写具体的程序, 同时,程序员 可以只关注于如何写程序,其他也不用关注,
从而实现了分工

VIEW方面 ,美工完全不用理会与业务方面的 东西 则 越符合MVC

controller:就是网页中控件需要响应的处理方法:
传统的CONTROLLER:
myDocument.onclick=showAnimatedMoney的就是事件型
AJAX中的Controller:
DOM对象的内建处理函数列表:
onmouseover:鼠标第一次经过空间区域
onmouseout:鼠标第一次离开空间区域
onmouseover:鼠标在控件区域内移动
onclick:shubiao单击
onleypress:当控件获取输入焦点时的按键事件
onfocus:获取焦点
onblur:失去焦点
现在使用的方法:
这里多使用观察着模式
监听程序,

MODAL实体:
就是在AJAX中 把数据封装到一个JAVASCRIPT类中
一切对数据库的操作都是在这个类中进行,
这个类包含进行数据操作的一切方法

MODAL的AJAX使用方式:
1使用ORM工具从数据库中取出数据模型(服务器端)
2使用xml封装该模型
3创建javaScript层的模型
4建立一个从javaScript返回数据库模型的机制

在AJAX开发中,尽量少使用表格 而使用css来操作一切, HTML语言只是把零件放在页面 上,所有的排版.位置摆放都用css来控制
根据需要适当的使用的JAVASCRIPT来控制控件的位置

AJAX服务器开发:

虽然ajax是对客户端技术的整合,但其实ajax真正有用的是与服务器的交互
也就是我们通用的一些ajax技术
服务器端结构

两层架构
三层架构
七层架构

三层架构:
就是显示界面 ,数据库,业务逻辑
显示界面负责与数据库连接把需要的数据取出来, 业务逻辑与数据库的操作都
写在一起.

n层架构:
狗咬刺猬,无从下手

1实体层
把数据库封装起来,例如一个表 都可以封装起来
2数据接口层
接受数据对象(即前面封装好的实体) 来处理实体,里面含有各种对数据库的操作,
如果SQL语句好,ADO.NET好,就可以专心功课数据接口层
注意:这里 其接受的参数是 实体 即封装好的对象
3业务逻辑层(起到承上启下的作用)
专门负责 整个页面的业务逻辑, 处理所有的点击事件,控件点击需要什么样的效果
需要哪个数据库,都是业务逻辑层的工作

适合非常熟悉用户需求的人 ,先点哪个,后点哪个,用户看了之后 很合胃口,用起来很
舒服,这些都是业务逻辑层的工作
4表示层:
提倡多用模板页,用户控件,来显示页面,可以提高页面的复用性

ajax设计里面经常使用的
通用服务器框架:
1
原始的:最早的
不适用任何框架,例如PHP,
适合不需要太多的维护的,就是把一切都组织在一起,没有什么明确的分工
一个人要知道各种知识,一个人来设计,没有美工,业务逻辑等的区别
优点:设计简单,效率相对还不错,
缺点:维护成本高,变更不灵活

2
三层架构模式
JSP,J2EE就是使用这种架构

3组件服务器模式工作
--组件做的最好的就是ASP.NET
4以服务为导向的架构联合工作

以web Service 为基础 实现网上定制服务
也就是SOA模式,
现在实现按需索取,付费服务的功能效果还不是很理想,不过这是未来的发展趋势

项目经理,
上级给你一项任务,可以对老板说,我要开个会议,
进行头脑风暴,和员工一起讨论这个任务,
搜集员工的意见,听取员工意见的时候,就把自己当成一个
旁听的,记者,不发火,然后根据员工的发言,提取出
开发这个项目需要什么,缺少什么,然后向老板汇报成绩
例如 需要多少资金,需要什么样的人才,然后由老板决定是否开发这个
项目,要把老板给的工作下分给员工,让每个员工都参与,
分担自己的压力,分配好工作才是项目经理的首要技能

开发软件 有三个要注意的:时间,质量.资源
time resource quality

交换数据
1
仅客户端脚本的数据交互
适合:
客户端具有大量的琐碎的数据计算工作
计算结构不需要大量传递
最后把一个结果传给服务器
减少与服务器的交互
能用客户端来完成 的任务,就尽量使用客户端来完成
就是一个页面,里面有很多js技术,所有的业务逻辑全部封装在客户端
2
以内容为核心的交互结构设计,
把所有的业务逻辑都放在服务器,用户只需要提交一个请求,
然后 服务器的业务逻辑调用这个请求,这些操作都在服务器处理,用户只需要提交请求,其他什么都不做
处理好之后,返回给用户一个网页,这个页面是根据用户的请求生成的页面
这个是传统的数据交换方式
选择服务器端框架
编写服务器端代码
3以脚本为核心的数据交互
例如:编写一个DOM 创建一个框架 然后动态构建这个框架类,
利用JS技术来为这个框架增加各种属性,最终完善这个框架,
需要用到的数据可来自其他页面,都是由JS结合DOM技术 动态生成的
相当于 ASP.NET中的WEB PARTS
这是以前AJAX产生之前 的 类似 AJAX的技术
和AJAX技术差不多 用XMLHTTP作为数据传输协议

3以数据为核心的数据交互
就是现在的AJAX技术
数据交换模型 传送 XML 而不是HTML
以前开发 都是根据用户得到请求然后传送一个HTML
而AJAX 是把请求封装成XML 传给服务器, 服务器处理后
返回的还是XML,而且 是异步调用 把要处理的数据 送给另一个页面
另一个空白页面专门负责与服务器交互,这样减少原来页面的部分工作
只有第一个页面处理好之后,第一个页面才会去从第二个页面接受数据

可结合 xml 与 XSLT 来显示XML文件

编写服务器端的代码:
1
最简单的就是使用form表单,里面是各种控件,最后提交

<form id="myForm" method="POST" action="" onsubmit="validateForm();return false;">
<input type="text" name="username" id="username">
<input type="password" name="password" id="password">
<input type="submit" name="submit" id="submit">
</form>

可以使用JS检测提交内容:
思想:
就是利用DOM技术获取form表单的需要的项
根据需要取舍,选取重要数据,也可根据需要
增加节点,最后才与服务器交互
function validateForm()()
{
var form=document.getElementById('myForm');
var user=form.elements[0].value;
var pwd=form.elements[1].value;
if(user && user.length>0 && pwd && pwd.length>0)
{
form.action='myFormHandlerURL.php';
form.submit();
}
else
{
alert("输入账号密码");
}
}

在一个html页面上 可以有多个form
一个html的不同的form可以提交给不同的服务器,
也可以提交给同一个服务器
这里就需要利用js技术来获取不同的form

2
使用JAVASCRIPT技术创建提交对象然后提交
//为form表单添加一个input控件
function addParam(from,key,value)
{
var input=document.createElement("input");
input.name=key;
input.value=value;
form.appendChild(input);
}
//创建一个form对象,并在其中创建多个input控件,
//控件的value值存储在数组data中
function submitData(url,data)
{
var form=document.createElement("form");
form.action=url;
form.method="POST";
for(var i in data)
{
addParam(form,i,data[i]);
}
form.style.display="none";//把元素的显示模式设置为不显示
document.body.appendChild(form);
form.submit();
}
//下面的参数传递.查资料
submitData("myFormHandlerURL.php",{username:"dave",password:"letmein"});

上面的方法 可以看到,页面什么很简单,什么代码都用jS自己创建

3使用xmlHTTP对象提交
代码和我们使用的AJAX代码差不多,具体参考AJAX书籍

苏朋的各人网站,电子邮件
主要从事网站开发 企业应用方面

supper3000@gmail.com
www.supengcast.net

提高用户体验:

一:
高质量的软件产品应用
1 响应度: 也就是用户点击后 响应度
例如 出现一个进度条,至少不会给人的感觉 想死机一样,要给客户一个
进度条,就算等待 也比看上去死死的好,
2性能
3一致性:主要是开发软件的时候 会因为不同的分工可能会出现 就是点击一个
按钮 只有一种操作,一般不会出现这种失误
4可用性
二:
保证用户关注度:
1当用户点击一个内容 在等待内容出现的时候,要使用JS脚本给用户一个
体验,这样能留住用户,不会因为等待时间长而使用户离开,这样使用户可以
使用户一直关注这个页面,
2对多用户提交数据进行集中处理
例如与服务器交互,当用户点击提交按钮的时候,可以不提交,
至少将其保存到XML文件中,第二个用户单击提交后,也保存到
xml文件中,等xml文件到达一定的长度,然后提交,这样降低与服务器的交互
主要用于 用户不是很需要的功能 可以等待的情况
也可是一群人做一项工作,因为工作是一个整体,所以可以
把每一个人的提交 送给xml保存起来,当整体都搞完再提交
三AJAX性能
JS在ajax中 是利用MOM树执行, 而每个dom树都要在内存中构建一个
DOM树 然后对其处理,当DOM树撤销的时候,是不是真的把内存中的
dom树 彻底删除了,如果没有处理好内存,没有很好的
释放内存,会使内存冗余 从而降级系统性能

测量JavaScipt的运行时间:
function MyTimeConsumingFunction()
{
var beginning=new Date();
var ending=new Date();
//中间是要执行的代码
var duration =ending-beginning;
alert(duration);
}

atlas概说
1实现了AJAX的组件的开发模式,帮我们封装好了
而且没有什么浏览器的区别,它自动创建使用所有浏览器
的组件应用,微软第一次使用所有的代码
2允许用户做任何开发扩充,就像可以开发自定义控件一样
也可以任意扩充ajax控件功能
3其他fromework还有很多,但是谈到快速开发,谈到与
asp.net整合 其无疑是最优秀的,而且以后功能还会提升
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: