.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. 数据库CRUD操作:C:create创建(添加)、R:read读取、U:update:修改、D:delete删除;高级查询

    1.注释语法:--,#2.后缀是.sql的文件是数据库查询文件3.保存查询4.在数据库里面 列有个名字叫字段   行有个名字叫记录5.一条数据即为表的一行 CRUD操作:create 创建(添加)re ...

  2. .Net使用CDO发送邮件,需安装注册的组件

    regsvr32 C:\Program Files\Common Files\System\ado\msado15.dll regsvr32 CDOEX.DLL

  3. nrf51822-使用16位自定义UUID

    以 ble_app_uart为例 工程中创建的nus服务以及其中的两个特性值都是128位的UUID.nordic sdk中使用128位UUID的方式和标准128UUID类似,它是提供一个基准UUID, ...

  4. HBase的数据迁移(含HDFS的数据迁移)

    1.启动两个HDFS集群 hadoop0,hadoop1,都是伪分布式的集群 2.启动hadoop3的zookeeper与hbase 注意点:需要开启yarn服务,因为distcp需要yarn. 3. ...

  5. 15 款最好的 C/C++ 编译器和集成开发环境

    我们有很多编程语言来进行 web 开发,比如 Java,.Net,PHP,Ruby,Perl,Python 等等.今天我们主要讨论的是两大古老而又流行的语言: C 和 C++ ,它们有着许多卓越的特性 ...

  6. JS实现页面回到顶部效果

    [代码] <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF- ...

  7. Essential Documents to Manage Your Projects

    Speak to an experienced project manager, and they can give you a wealth of good advice on the do's a ...

  8. http请求及模拟浏览器发送http请求

    /**    *测试新增图片   * @throws IOException    * @throws HttpException    * @throws SAXException    * @th ...

  9. JS传中文到后台需要的处理

    前台JS使用encodeURI函数对中文进行编码. 后台Java使用URIDecoder.decode(str,UTF_8)函数对中文进行解码,之后获得中文原文.

  10. html5头部说明

    <!DOCTYPE html> <!-- 使用 HTML5 doctype,不区分大小写 --><html lang="zh-cmn-Hans"> ...