GPS部标平台的架构设计(十)-基于Asp.NET MVC构建GPS部标平台

在当前很多的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的平台数据通信设计

最后的工程:

时间: 2024-08-05 06:52:35

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

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

基于ASP.NET MVC的快速开发平台,给你的开发一个加速度! bingo炸了 2017/4/6 11:07:21 阅读(37) 评论(0) 现在的人做事情都讲究效率,最好能达到事半功倍那种效果,软件行业也不例外.但是需求的一再变动,架构和业务功能的一改再改,往往使得软件的开发事倍功半.软件行业急需突破现现状,所以快速开发框架就这么应运而生了.但是市面上快速开发框架种类繁多,今天我给大家带来的是一套界面风格简洁大方.多业务功能.基于ASP.NET+MVC的快速开发框架. 体验地址我会在下文附上

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

总体来讲,GPS部标平台的软件开发是一个对网络通信和应用程序之间通信的技术应用密集型的开发工作,也是有一定设计技术含量的工作. 1.设计通信接口 在设计的时候,根据职责划分,拆分成不同的应用子系统,对各个子系统进行功能隔离,并通过设计接口规定子系统直接的调用规约. 首先我们根据部标平台的要求,设计和开发出各个主要的服务器子系统,这是平台中最核心的子系统,在实际的应用中,由于车辆规模的大小和行业需求,还会扩展出各种业务子系统.核心子系统如下: 1)808GPS服务器,采用交通部的部标808协议,负

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

部标GPS软件平台之百度地图设计 地图是客户端中不可缺少的一个模块,很多人在设计和画图时候,喜欢加上地图引擎这样高大上的字眼,显得自己的平台有内涵,说白了就是用第三方的SDK来开发,早期的GPS监 控软件用的都是mapx.mapxtrem.acrgis之类的,使用的都是本地地图.不仅要购买正版地图,还要购买价格不菲的地图引擎license,服务器版的部署的时候,还要绑定到服务器ID上,现在这种开发方式已被抛弃.现在的百度地图.谷歌地图提供的SDK接口丰富,开发方便,系统稳定,大家都用的很爽. 在

基于CentOS 6.5构建KVM服务器平台、网络和存储、公钥和私钥的建立

1.什么是虚拟化通过虚拟化技术将一台计算机虚拟成多台逻辑上的计算机.每个逻辑上的计算机可以安装不同的操作系统,这些系统之间互相独立并且互不干扰2.什么虚拟机一个软件平台,如同一个物理机上面运行操作系统和应用程序3.目前主流的虚拟化产品VMwareMicosoftCitrix RedHat 4.KVM网络设置NAT模式(默认)    KVM虚拟机网卡选择NAT,网关指向HOST主机的内网192.168.1.1,它就可以直接访问外网.路由模式(HOST开启路由转发功能)    HOST主机充当路由器

Orchard 基于 ASP.NET MVC 技术的免费开源内容管理系统

Orchard 是由微软公司创建,基于 ASP.NET MVC 技术的免费开源内容管理系统: 可用于建设博客.新闻门户.企业门户.行业网站门户等各种网站 简单易用的后台界面 性能稳定,功能齐全 热拔插模块化架构提供超强可扩展性 BSD 协议授权,可用于商业闭源项目 下载地址:https://orchard.codeplex.com/releases/view/119931 相关博客:http://www.orchardch.com/Blog 一个基于Orchard的开源CRM --coevery

基于ASP.NET MVC和Bootstrap搭建响应式个人博客站

1.0 为什么要做这个博客站? www.zynblog.com 在工作学习中,经常要搜索查找各种各样的资料,每次找到相关资料后都会顺手添加到浏览器书签中,时间一长,书签也就满了.而且下次再点击这个书签时,可能 就会忘记当时为什么要添加这个书签了,更有可能书签连接已经无效.这样一来,也就不方便自己查阅了.如果转载.收藏到自己的博客园账号中.CSDN账号 中,脚本之家中,知乎中等等,依然是很凌乱,不方便下次查阅. 因此,我下决心开发一个个人技术博客站.主要原因是:可以整合各种宝贵资源,将知识变为宝库

基于ASP.NET MVC和Bootstrap搭建响应式个人博客站(一)

1.0 为什么要做这个博客站? www.zynblog.com   在工作学习中,经常要搜索查找各种各样的资料,每次找到相关资料后都会顺手添加到浏览器书签中,时间一长,书签也就满了.而且下次再点击这个书签时,可能 就会忘记当时为什么要添加这个书签了,更有可能书签连接已经无效.这样一来,也就不方便自己查阅了.如果转载.收藏到自己的博客园账号中.CSDN账号 中,脚本之家中,知乎中等等,依然是很凌乱,不方便下次查阅. 因此,我下决心开发一个个人技术博客站.主要原因是:可以整合各种宝贵资源,将知识变为

ASP.NET MVC 接入微信公共平台

ASP.NET MVC 接入微信公共平台 申请微信公共账号 既然要接入微信公共平台,微信公共号是必须的(当然如果只是测试的话也可以申请微信公共平台接口测试账号),来这里微信公共平台 申请微信公共号(注:申请微信公共号不能用已绑定微信的邮箱),微信公共平台有自己的官方文档,官方文档有不少资料,可以多看看,开发者模式默认是关闭的,需要配置并启用,如下图: URL即你的网站处理微信模块,必须是HTTP://开头的网站,笔者自己之前接入几天一直失败,最终发现是因为自己网站加密了用的是HTTPS,这个需要

GPS部标平台的架构设计(九)-GPS监控客户端设计

交通部的部标过检,所有的测试都是从客户端发起的,也是在客户端体现的,在客户端承载了部标标准所要求的所有的功能,是整个部标平台当中工作量最大的部分,也是最繁琐的部分. 客户端设计面临两个问题: 1.基于CS还是基于BS,这是个问题 萝卜白菜各有所爱,客户要什么,我们就开发什么,从客户来讲,更适应桌面客户端,没有浏览器的七七八八问题,速度感觉上也比网页的快,操作方便.当然网页客户端也有很大的优势,部署和维护方便,不需要开发升级系统. 2.与服务端的交互通信,采用Socket, WebService还