.net开发,html ajax开发架构之我见 bs ajax最简化法 Knock out Request,totally oo
.net开发中,无论ajax还是webform,webpage, 总免不了要和request这个静态全局,可以远程通信的对象打交道。
而对于软件来讲,按照Matin Fowler的的面向对象,可利用软件的设计之道之说,面向对象的软件,OO最大的好处莫过于实现了良好的封装和复用。
通过封装和复用,我们就可以实现自己理想中的软件,我总结并经常说的其中一句话“整套软件一定要所有的代码只写一遍,而且,从不写第二遍”,这句话表明了我自己在oo上的追求,而我也不断将自己的写法向更优雅更易复用的方向迈进。
而对于Oo,我还总结了第二个方法,是关于软件的输入点的,也就是,“整套软件应该只有一个输入点,即配置的最小化”。而我们在写软件的时候,看过OOD方面书籍大部分的人都知道单一职责,基于抽象与接口,而这些方法,也只是我们考虑问题的基本,“不可能一次做好所有的事情,但你从来都有时间重做”,从这点来看,重构提练方法就体现了个人的思维的周全。
其实软件开发,我从来都觉得在这一方面耍些小聪明是必要的!一定要想方设法来偷懒-这点从我上面提到的第一点上就可以看出,重复返工谁也不会喜欢,而只写一次,与其说懒,不如说此时已经达到了复用的阶段。
但写了不少代码,发现真正的重构,很少是事后已经完全写好之后才做出的,往往是边写边观察,在写一个类的时候不断重构提取其中的方法。然后每个方法最终小的只剩下基本上三行就搞定了,而越小越明了的方法往往更加利于个人往此类之外提取和重构。
最后说下我在AJAX方面发现的一个比较简便的方法,这个是重点,我个人认为,这已经将HTML AJAX开发的精简达到了极致-看现在的各种JS构架,无论是MVC的 angular js或是其他的一些对dom做一些个性定制的js 框架,我个人认为它们也许在使用上更加地优雅和利于使用,但是它们总是出现了更多的js的封装,并不是说Js的封装不好,我个人也喜欢一些封装的js的组件,比较常用的table,pager等等,但是在开发和传输数据上,我倒并不赞同他们的方法,我还是觉得最简化的方法永远都是使用html原有特性的方式。
我目前使用的开发方法是 使用html的form进行封装一个表单,而表单中的各项,按ruby on rails的设计思想和大家熟知的理念“约定大于配置”这个黄金定律,而往往一些比较好的已经被大部分人接受的约定往往能发按意想不到的作用。
所以在ajax方面,按照解耦的思想,前端和后端是完全分离的,也就是一个前端,只需要后端提供数据,而数据来源大可以换一种架构或编程语言来实现,这些都无所谓。 而 大家都知道现在的编程语言都有元数据这种包含数据类型与操作描述的东西,那么用反射,我们就可以使约定成为实实在在的类型。
ajax方面,我们就只需要将自己想要的东西写在form中,添加name,然后序列化后 传输到后端,而后端,我们就以此name 约定为自己的实体model的property来反射实现实体的自动赋值,这样也就达到了knock out request的目的,据我所知,现在流行的oo web语言等包括 Php jsp c#都有各自的反射机制,所以机理也是一样的,这样就实现了只有一个输入点。也就是配置了Name,全局再不要配置,接下来就是完全的oo了,可以restful,可以各种方式操作对象了。
Ps:web ajax开发中,若要使用http handler也可以,只是 方法过多,往往会出现很多个handler,而反射 method invoke方法 和入口后 使用工厂来创建的方法又往往要求过多,你不得不按约束来弄一堆,而且这种方式总感觉不是那么优美,最后选择了webservice,虽然.net2.0下没安ajax扩展会出现找不到scriptservice,但也只需要将最后返回的xml中取string tag中的内容即可,而json从来都是一个js对象,目前已经成为web中传输的一种标准。
总结吧:从request中直接反射来取model,因为数据无非就在于request 的form和query string两个集合中,通过一次约定name,这样就实现了只有一次输入,完全的Oo入口,最小化了配置入口的思想。
补充:我个人认为,反射取值的时候,倾向直接按索引key来取,而把request null的异常扔掉,这样可以提高一些性能上的优点,因为 按表索引 和全文搜索的区别用在这里,取特定值的时候尤其是在已经加了索引的键值上,自然是直接取键值快过循环对比再取。此处的类型转换,是将类型转换为Model的property type,catch时 将这个异常忽略我想会比较好一些。
.net开发,html ajax开发架构之我见 bs ajax最简化法 Knock out Request,totally oo的更多相关文章
- ajax(ajax开发)
AJAX即“Asynchronous Javascript And XML”(异步JavaScript和XML),是指一种创建交互式网页应用的网页开发技术. AJAX = 异步 JavaScript和 ...
- 界面开发工具集Telerik UI for ASP.NET AJAX发布R2 2019
Telerik UI for ASP.NET AJAX拥有构建ASP.NET AJAX和SharePoint应用程序的80+控件,将为任何浏览器和设备构建Web Forms应用程序的时间缩短一半.Te ...
- MVC5 网站开发之五 展示层架构
展示层由Ninesky.Web项目实现,负责网站内容的显示,项目包含Member和Control两个区域. 目录 奔跑吧,代码小哥! MVC5网站开发之一 总体概述 MVC5 网站开发之二 创建项 ...
- Apworks框架实战(四):使用Visual Studio开发面向经典分层架构的应用程序:从EasyMemo案例开始
时隔一年,继续我们的Apworks框架之旅.在接下来的文章中,我将逐渐向大家介绍如何在Visual Studio中结合Apworks框架,使用ASP.NET Web API和MVC来开发面向经典分层架 ...
- Ajax开发中服务端Response的Content-Type
转自http://www.cnblogs.com/hyl8218/archive/2010/03/10/1681484.html ajax开发中在请求服务器端的响应时, 对于每一种返回类型 规范的做法 ...
- 实战使用Axure设计App,使用WebStorm开发(3) – 构建页面架构
系列文章 实战使用Axure设计App,使用WebStorm开发(1) – 用Axure描述需求 实战使用Axure设计App,使用WebStorm开发(2) – 创建 Ionic 项目 实战使 ...
- Web的Ajax应用开发模式(二)——Ajax开发模式分析
寄语: 前天在查看一些公司的招聘要求时,看到有公司要求测试人员了解Ajax,故写此博文旨在帮助测试人员提高自身技术知识水平,愿与广大测试同胞共同进步.(欢迎纠错!!!) Web应用的传统开发模式总结: ...
- iOS开发之组件化架构漫谈
前段时间公司项目打算重构,准确来说应该是按之前的产品逻辑重写一个项目.在重构项目之前涉及到架构选型的问题,我和组里小伙伴一起研究了一下组件化架构,打算将项目重构为组件化架构.当然不是直接拿来照搬,还是 ...
- 转:Android开发中的MVP架构(最后链接资源不错)
Android开发中的MVP架构 最近越来越多的人开始谈论架构.我周围的同事和工程师也是如此.尽管我还不是特别深入理解MVP和DDD,但是我们的新项目还是决定通过MVP来构建. 这篇文章是我通过研究和 ...
随机推荐
- CentOS安装JAVA后JAVA版本不对的问题
今天用CentOS安装JDK,发觉在安装完成后,输入java命令来验证是否安装成功时,出现 Usage: gij [OPTION] ... CLASS [ARGS] ... to i ...
- [Android] Intent详解
[转]http://www.cnblogs.com/engine1984/p/4146621.html [正文] Intent组件虽然不是四大组件,但却是连接四大组件的桥梁,学习好这个知识,也非常的重 ...
- Jetbrains phpstorm pycharm 免费授权注册码
通过授权服务器授权 jetbrains是一家专门做IDE的软件公司,软件也非常好用,但是授权特别贵,下面就说说免费的方式,就是使用授权服务器,地址:http://idea.qinxi1992.cn 自 ...
- Jquery元素选取、常用方法;js只能获取内联样式,jquery内联内嵌都可以获取到;字符串.trim();去字符串前后空格
一:常用的选择器: 基本选择器 $("#myDiv") //匹配唯一的具有此id值的元素 $("div") //匹配指定名称的所有元素 $(".myC ...
- 【转】一篇很全面的freemarker教程---有空慢慢实践
FreeMarker的模板文件并不比HTML页面复杂多少,FreeMarker模板文件主要由如下4个部分组成: 1,文本:直接输出的部分 2,注释:<#-- ... -->格式部分,不会输 ...
- Linus:利用二级指针删除单向链表
Linus大神在slashdot上回答一些编程爱好者的提问,其中一个人问他什么样的代码是他所喜好的,大婶表述了自己一些观点之后,举了一个指针的例子,解释了什么才是core low-level codi ...
- fseek的使用
一:概述 在官方文档里,对于fseek的描述是 Move to specified position in file,移到文件的某一个特殊位置 二:语法 status = fseek(fileID, ...
- Spark Programming--Fundamental operation
max max(key=None) Find the maximum item in this RDD. Parameters:key – A function used to generate ke ...
- 【C++】字符串的大小写转换
#include<string> #include<algorithm> #include<iostream> using namespace std; int m ...
- (转帖) java内存分配分析/栈内存、堆内存
http://blog.csdn.net/qh_java/article/details/9084091