.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的更多相关文章

  1. ajax(ajax开发)

    AJAX即“Asynchronous Javascript And XML”(异步JavaScript和XML),是指一种创建交互式网页应用的网页开发技术. AJAX = 异步 JavaScript和 ...

  2. 界面开发工具集Telerik UI for ASP.NET AJAX发布R2 2019

    Telerik UI for ASP.NET AJAX拥有构建ASP.NET AJAX和SharePoint应用程序的80+控件,将为任何浏览器和设备构建Web Forms应用程序的时间缩短一半.Te ...

  3. MVC5 网站开发之五 展示层架构

    展示层由Ninesky.Web项目实现,负责网站内容的显示,项目包含Member和Control两个区域.   目录 奔跑吧,代码小哥! MVC5网站开发之一 总体概述 MVC5 网站开发之二 创建项 ...

  4. Apworks框架实战(四):使用Visual Studio开发面向经典分层架构的应用程序:从EasyMemo案例开始

    时隔一年,继续我们的Apworks框架之旅.在接下来的文章中,我将逐渐向大家介绍如何在Visual Studio中结合Apworks框架,使用ASP.NET Web API和MVC来开发面向经典分层架 ...

  5. Ajax开发中服务端Response的Content-Type

    转自http://www.cnblogs.com/hyl8218/archive/2010/03/10/1681484.html ajax开发中在请求服务器端的响应时, 对于每一种返回类型 规范的做法 ...

  6. 实战使用Axure设计App,使用WebStorm开发(3) – 构建页面架构

    系列文章 实战使用Axure设计App,使用WebStorm开发(1) – 用Axure描述需求  实战使用Axure设计App,使用WebStorm开发(2) – 创建 Ionic 项目   实战使 ...

  7. Web的Ajax应用开发模式(二)——Ajax开发模式分析

    寄语: 前天在查看一些公司的招聘要求时,看到有公司要求测试人员了解Ajax,故写此博文旨在帮助测试人员提高自身技术知识水平,愿与广大测试同胞共同进步.(欢迎纠错!!!) Web应用的传统开发模式总结: ...

  8. iOS开发之组件化架构漫谈

    前段时间公司项目打算重构,准确来说应该是按之前的产品逻辑重写一个项目.在重构项目之前涉及到架构选型的问题,我和组里小伙伴一起研究了一下组件化架构,打算将项目重构为组件化架构.当然不是直接拿来照搬,还是 ...

  9. 转:Android开发中的MVP架构(最后链接资源不错)

    Android开发中的MVP架构 最近越来越多的人开始谈论架构.我周围的同事和工程师也是如此.尽管我还不是特别深入理解MVP和DDD,但是我们的新项目还是决定通过MVP来构建. 这篇文章是我通过研究和 ...

随机推荐

  1. Python文件方法

    打开文件 使用open函数,语法格式为:open( name[, mode[, buffering]]),name为打开文件名,mode为打开文件方式,buffering控制文件的缓冲. mode可选 ...

  2. 【php学习】字符串操作

    关于字符串的处理,基本上就是那几种操作:字符串长度.查找子字符串的位置.替换字符串.截取字符串.拆分合并字符串 ... 字符串的定义:直接 $str = "abcd"; 或者 $s ...

  3. 【转】C# 解析JSON方法总结

    http://blog.csdn.net/jjhua/article/details/51438317 主要参考http://blog.csdn.NET/joyhen/article/details/ ...

  4. java JDK8 学习笔记——第13章 时间与日期

    第十三章 时间与日期 13.1 认识时间与日期 13.1.1 时间的度量 1.格林威治标准时间GMT 格林威治标准时间的正午是太阳抵达天空最高点之时.现在已经不作为标准时间使用. 2.世界时UT世界时 ...

  5. Java学习-006-三种数据库连接 MySQL、Oracle、sqlserver

    此文主要讲述在初学 Java 时,常用的三种数据库 MySQL.Oracle.sqlserver 连接的源代码整理.希望能对初学 Java 编程的亲们有所帮助.若有不足之处,敬请大神指正,不胜感激!源 ...

  6. Ext.widget()作用是使用别名创建对象。

    Ext.widget()作用是使用别名创建对象.使用已经的定义的组件的别名创建这个对象

  7. SqlServer基础:游标

    记录下今天用到的游标: DECLARE @TempID INTDECLARE @Number INTSET @Number=1DECLARE myCursor CURSOR FOR     SELEC ...

  8. CentOS6.5Minimal安装Gitlab7.5

    文章出处:http://www.restran.net/2015/04/09/gilab-centos-installation-note/ 在 CentOS 6.5 Minimal 系统环境下,用源 ...

  9. 30天,O2O速成攻略【8.22北京站】

    活动概况 时间:2015年8月22日13:30-16:30 地点:车库咖啡(北京市海淀西大街48号鑫鼎宾馆二层) 主办:APICloud.融云.品读者 网址:www.apicloud.com 费用:免 ...

  10. 如何禁止DELETE、PUT、OPTIONS、TRACE、HEAD等协议访问应用程序 .

    原文:http://linder.iteye.com/blog/735435   简介 WebDAV (Web-based Distributed Authoring and Versioning)是 ...