在当前很多的GPS平台当中,有很多是基于asp.NET+siverlight开发的遗留项目,代码混乱而又难以维护,各种耦合和关联,要命的是界面也没见到比Javascript做的控件有多好看,随着需求的增多,平台已经臃肿不堪。

设计基于.NET的GPS部标平台,我们坚定不移的选择了基于JQUERY+Asp.NET MVC来作为前端交互和后台处理的框架。选用一个灵活的脚手架,同时团队又能掌握这个脚手架为团队所用。

对于一个web应用项目,基于MVC的框架,前面文章提到过,最大的优点就是结构清晰,强制性的将繁乱的页面,请求,后台处理逻辑,划分成MVC三层结构,一层一层的做开发,一层一层的维护,同时层也不多,适可而止。通过MVC,高手和低手,在开发的初期基本上站在一个起跑线上,这个我认为很重要,特别是团队开发和维护,团队中的人开发水平各不一样,对于架构设计这种抽象到家的技术,理解也各不一样,每次项目启动的时候,都有各种各样的争论,都觉得自己是架构师,这是很要命的,很多人认为设计可以让开发效率更高,代码更容易扩展,后期更容易维护,性能更好更稳定,更易用。但糅合各种意见、评审、讨论、妥协的设计无一例外最终却走向反面。

很多人都是从asp.net web form过来的,对这个很不以为然,其实正是这种温吞水煮青蛙的开发技术,造成了部分人员留下了惨痛的后遗症,主要表现在:

1.首先就是学习能力差,其实也不是没学习能力,主要是看见新东西没兴趣,没动力,这个要命的缺点造成了后面的缺点

2.大量依赖于服务器端控件,对于前端的javascript以及js框架,css+div布局等技术,掌握很少,造成前端开发效率低下,出一点问题就调试老半天。技术太单一,在职场上可以说没有竞争力和吸引力。

3.写代码时,各种随意,有的不分层,各种逻辑都一股脑揉进UI,有的分层,但往往受PetStore的毒害,搞了很多层,画虎不成反类犬,为了重用,一层套一层,连环调用,看代码,需要运行打断点,一层一层往下看,就像进入十八层地狱,最后终于到底看到了SQL。代码中特别喜欢直接写SQL,各种insert,select满天飞,各种ifelse,各种重复,这些项目中代码量最大的地方,往往就在这个地方,而这个地方是最没技术含量的。

很多开发者经历过各种苦难,都想在下一次开发中不要这样,但如果出于对未来变数的恐惧而总是追求各种莫须有以后也从未发生过的扩展,在项目的初期就臆想各种高性能,高批量,大规模,因为抽象而引入各种抽象,因为架构设计就设计一个复杂的架构。那么开发者的宿命就是不断的轮回。

对于一个GPS的Web平台,设计的重心就是要回归到结构清晰,先谈结构,再谈架构,结构是扁平化,清晰化,一堆乱如麻的东西我们的目标就是消除臃肿,归类,分清楚,需用用的时候找得到,简洁化;架构是立体化,也是复杂化,多个子系统,多个接口,多个服务,多种面向服务的调用。

我们在设计的时候,总是先在文档中牛掰的写到设计原则与目标,但是往后面看,发现我们设计和开发的东西和我们写的原则没有一点毛关系。所以要想设计好,就要想清楚你得设计原则是不是有利于你的设计目标,你做的东西是不是奔着你设计的目标去了。

我们的设计原则就是追求结构清晰,说白了就是追求单一职责原则的最大化,无论前端还是后台。一个萝卜一个坑,一个萝卜坑里面就是一个萝卜,不能里面放一颗白菜。

1.MVC,三层够用,再多打屁屁。

2.追求命名具体而规范,特别是前端。看到命名,能知道功能,最好就像仓库的标签。看到名字,就知道是干什么的,在哪里放着,也知道应该在哪里放。

3.减少抽象, C#和java放弃了c++的多重继承,就是因为复杂度的增加,得不偿失。你要理解这个,多重接口你也不愿意用,看者都晕。我在看Ibatis的源码的时候,一个类后面继承了五六个接口,看到一个接口定义的变量后,如果不打上断点,都找不到实现类在哪里。很多代码都是如此,等项目结束了,回头看,好听点就是层层调用,通俗地说就是大方法里套小方法,小方法里调邻居方法,调的多了,复杂度就上来了,一个方法多个地方调用、重写(override),等你想修改的时候,影响一大片。

4.追求单一职责,一个功能,或者逻辑紧密相关的功能,归结到一个类中。单一职责原则中对职责的理解各不一样,同时也可大可小,小到一个功能点,大到一个功能模块,子系统。这也是要求我们要把这个原则从小到大,从底向上,从前到后,贯穿始终。单一职责原则和命名规范结合一起,有利于维护结构的清晰。比如你看到GPS平台的车辆树菜单,想进入到js代码中调试,由于我们把关于车辆树的代码都写入到一个独立的vehicleTree.js中,那就直接找到了。看到前端代码后,我们想看看后端是怎么是怎么处理ajax 请求的,由于是采用MVC框架,处理前端请求的都是编写对应的controller类,我们命名是VehicelTreeController.cs文件,这样我们也快速的定位到代码,也明白了从前到后的调用路径和结构。同时这个里面的代码就是写的再乱,也不会传染给其他代码,所谓的传染就是一段复杂难理解、难调试、难维护的代码,不会造成其他文件或功能的代码难以理解、调试和维护。

5.减少装逼。在项目的前期,各种装逼,什么需求分析,概念设计,架构设计,UML等等时间杀手,装逼的成本高昂,代价惨重。我们追求的结构就是扁平化,不需要你装逼,整各种傻逼UML图,也不需要你写各种自己都不会去看的文档。一个excel就够了。

功能描述 js类 controller类 service类
车辆树 vehicleTree.js    
主菜单 mainMenu.js        

当然一个复杂的部标平台,不仅仅是web,还要部标808和809GPS服务器等,各个子系统之间也需要互联互通,压力最大的在于GPS服务器, 参见我前面的文章:

GPS部标监控平台的架构设计(八)-基于WCF的平台数据通信设计

部标808协议模拟终端的设计和开发

1)808GPS服务器,采用交通部的部标808协议,负责与终端的数据接收、指令下发; 参见:基于部标JT/T 808协议及数据格式的GPS服务器

2)809转发服务器,采用交通部的部标809协议,作为企业下级平台,负责转发GPS数据到政府平台的服务器;参见:基于JT/T809-2011的(已过检)GPS平台数据交换及转发服务器

最后的工程:

如需购买GPS平台源码+文档+服务,可以联系我2379423771@qq.com。

GPS部标平台的架构设计(十)-基于Asp.NET MVC构建GPS部标平台的更多相关文章

  1. GPS部标平台的架构设计(三) 基于struts+spring+hibernate+ibatis+quartz+mina框架开发GPS平台

    注意,此版本是2014年研发的基于Spring2.5和Struts2的版本,此版本的源码仍然销售,但已不再提供源码升级的服务,因为目前我们开发的主流新版本是2015-2016年近一年推出的基于spri ...

  2. 基于ASP.NET MVC的快速开发平台,给你的开发一个加速度!

    基于ASP.NET MVC的快速开发平台,给你的开发一个加速度! bingo炸了 2017/4/6 11:07:21 阅读(37) 评论(0) 现在的人做事情都讲究效率,最好能达到事半功倍那种效果,软 ...

  3. GPS部标监控平台的架构设计(十一)-基于Memcached的分布式Gps监控平台

    部标gps监控平台的架构,随着平台接入的车辆越来越多,架构也面临越来越大的负载挑战,我们当然希望软件尽可能的优化并能够接入更多的车辆,减少在硬件上的投资.但是当车辆增多到某一个临界点的时候,仍然要面临 ...

  4. GPS部标监控平台的架构设计(八)-基于WCF的平台数据通信设计

    总体来讲,GPS部标平台的软件开发是一个对网络通信和应用程序之间通信的技术应用密集型的开发工作,也是有一定设计技术含量的工作. 1.设计通信接口 在设计的时候,根据职责划分,拆分成不同的应用子系统,对 ...

  5. GPS部标平台的架构设计(四)-百度地图设计

    部标GPS软件平台之百度地图设计 地图是客户端中不可缺少的一个模块,很多人在设计和画图时候,喜欢加上地图引擎这样高大上的字眼,显得自己的平台有内涵,说白了就是用第三方的SDK来开发,早期的GPS监 控 ...

  6. GPS部标平台的架构设计(一)

    设计和开发一个GPS系统似乎并不太难,很多人马上就想到了地图,放大,缩小之类的功能,最多就是在加点报表之类的东西,就成了. 这种观点造成了业界内,很多GPS系统粗制滥造,不堪大用. 事实上,设计和开发 ...

  7. 基于C#和Asp.NET MVC开发GPS部标监控平台

    基于交通部796标准开发部标监控平台,选择开发语言和技术也是团队要思考的因素,其实这由团队自己擅长的技术来决定,如果擅长C#和Asp.NET, 当然开发效率就高很多.当然了技术选型一定要选用当前主流的 ...

  8. 基于C#和Asp.NET MVC开发GPS部标视频监控平台

    基于C#和Asp.NET MVC开发GPS部标监控平台 目前整理了基于.NET技术的部标平台开发文章,可以参考: 1.部标Jt808协议模拟终端的设计和开发 2.C#版的808GPS服务器开发-> ...

  9. cWeb开发框架,基于asp.net的cWeb应用开发平台介绍(二)

    cWeb是基于微软的.Net Framework 4框架,数据库是sql server 2008 r2. cWeb开发框架下载,点击这里去下载. cWeb开发框架借鉴三层架构理论分为三层,分别是:cD ...

随机推荐

  1. QQ列表展示

    <!DOCTYPE html><html> <head> <meta charset="UTF-8"> <title>& ...

  2. [工作中的设计模式]解释器模式模式Interpreter

    一.模式解析 解释器模式是类的行为模式.给定一个语言之后,解释器模式可以定义出其文法的一种表示,并同时提供一个解释器.客户端可以使用这个解释器来解释这个语言中的句子. 以上是解释器模式的类图,事实上我 ...

  3. data Binding

    在WEEX中,我们使用{{}}双括号来对数据进行绑定,一旦我们对数据进行了绑定,当数据发生改变时,模板中的内容也会发生相应的改变. 如果绑定的数据是一个对象,里面有很多的内容,我们可以使用  .   ...

  4. 一个叫vtysh的命令行shell

    目前的工作就是在这个叫vtysh的工具上进行修改,终极目的是把它作为一个代替shell的东西.以此来屏蔽用户和系统之间的接触,减少用户对系统的操作权限.

  5. php文字、图片水印功能函数封装

    一直在做有关php文字图片上传方面的工作,所以把此功能函数整理了一次,现在分享给大家. <?php class image { var $g_img; var $g_w; var $g_h; v ...

  6. windows 安装MySql

    转载:http://blog.csdn.net/longyuhome/article/details/7913375 Win7系统安装MySQL5.5.21图解 大家都知道MySQL是一款中.小型关系 ...

  7. java Properties 配置信息类

    Properties(配置信息类):主要用于生产配置文件和读取配置文件信息. ----> 是一个集合类 继承HashTable 存值是以键-值的方式. package com.beiwo.io; ...

  8. *HDU2852 树状数组(求第K小的数)

    KiKi's K-Number Time Limit: 4000/2000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)T ...

  9. Join函数 及Split函数精解示例

    '************************************************************************* '**模 块 名:Join函数 及Split函数精 ...

  10. linux kernel链表

    参考: http://blog.csdn.net/echoisland/article/details/7079943