VMS项目总结
开发完一个项目后,如果能够很好的对这个项目做个总结,对我们以后的项目开发以及个人技术的积累都会有很大的帮助。最近在外派公司做完一个系统,在此进行一下深入的总结,也希望给读者带来一些个启示。
一.系统介绍
本系统是某一跨国公司北京Site的班车预订系统(班车超多,往返于北京和天津之间)。客户(公司员工)能够在本系统中已经发布的班车路线里预订座位;如果没有相应的班车(座位已满),可以提交申请,让Travel
Clerk新建立班车路线;能够对系统运行进行各种的统计生成报表,比如班车运行效率,司机出车情况等等。
二.应用的开发技术和工具
ASP.NET 2.0, ASP.NET Ajax, SqlServer 2000, C#, NHibernate, Crystal Report
使用的是常用的技术,我认为开发一个系统不一定要用最流行的技术,这要看项目开发的需求,以及参与开发人员掌握的情况。如果项目紧的话,就需要采用成熟(传统ASP.NET技术)的技术进行有效的开发。系统的业务层和数据访问层在此系统实际上归为了一个层里,都由Nhibernate实现。Nhibernate是一个.Net实现的面向对象的框架,即ORM. 我觉得和Linq很类似。
三.项目开发中遇到的实际问题
令我印象最深刻的就是,在开发中系统需求一直在变化,因此一听到要改东西,心里就窝火。
要知道需求频繁的变更,对于开发来说打击很大,殊不知不断的改代码,系统会变得脆弱些,当然这样应当加大测试的力度。
在开发之前的设计中也有一个失误,没有把业务考虑全,造成在开发中要费很大的力量进行弥补(在此提一下设计的失误之处,一般情况下班车是不跨天运营的,在开发中期,客户竟然提出班车有可能跨天,比如晚上11点出发,后半夜12点半去机场接人),超郁闷。
在技术上基本上没有什么障碍,在组员的互相交流中很快搞定。
四.开发中值得一提的几个技术点
1. 模板页的应用
当然了既然用asp.net 2.0开发,基本上会用到模板页的,但是使用的深度不同。比如说Master Page和Content
Page之间(双向的)的相互访问。一般情况下是Content Page访问Master Page,然而反过来呢?在此提出一个建议,当Master Page访问Content Page时应当是松散耦合的, 可以在Master
Page中生成事件让Content Page来订阅。
还有一点值得一提,因为Master Page是一个Naming Container,所以在它之下的控件的ID之前是要坠上Master
Page的ID的,此外Content Place Holder和GridViewRow等等都是Naming Container,因此在应用FindControl时要注意,此函数是不能穿透Naming
Container来寻找指定Control的。
2. 跨页提交
跨页提交是ASP.NET 2.0的一个新特性,当提交页面要向另外一个页面传递大量数据时,可以考虑用跨页提交技术。因为其他技术都不怎么合适,比如Session,QueryString(地址栏参数最大限制为2K)等等。
3. 动态生成控件以及响应事件
在页面中有时需要动态生成很多的控件,这些还要相应事件。在这种情况下要注意,如果不做好处理,当页面进行回发时,动态控件会丢失。我们需要在每次在页面的PreInIt或者Init事件里生成这些动态控件。
4. Javascript和Css
开发这个系统没有用到什么流行的技术,但是Javascript和Css要求很高。因此在这两方面有所提高。在次提一下,做asp.net开发的人员有相当一部分人员是由桌面开发转来的,因此大家的Javascript和Css功底一般不深,老是认为这些是美工他们的工作,心理存在某些个抵制,看不起Javascript。这是一个认识上的问题,做Web开发,不管.NET有多精深,ASP.NET最终要做的还是要把html标记推送到客户的浏览器里。如果不懂html,
javascript, css,我可以说ASP.NET开发是永远做不到精益求精的。启示做Web开发要求掌握很多的东西, http协议,IIS,web技术,服务器部署等等。还是那句话,学海无涯,技术无止境!
5. Nhibernate
开发这个系统对Nhibernate有了一定的认识,ORM框架用起来确实很方便,我们用对象去考虑问题,不必再写那些个繁琐的Sql语句,当然些hql还是要懂得sql才行。Linq的目的也在此。但是对于复杂的统计功能,我觉得Nhibernate就不合适了,因此这个系统在这方面还是用的Sql。
6. 高效率使用Google查询
这个项目确实很紧,做Web开发离开互联网,离开Google不可想象。也许也应了这句话,Web开发来源于互联网,回报于互联网。如果能高效的借助Google快速找到自己要解决问题的方案,会加快项目的开发。请在这里阅读本人的Google搜索心得。
VMS项目总结的更多相关文章
- oVirt-engine项目UI结构
1.管理面板文件路径 ovirt-engine/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmi ...
- apache的开源项目-模板引擎(Velocity)(转)
然后修改conf文件下的server.xml文件,在server.xml里的 <Connector port="8080" .... />字段后 ...
- GNU 项目(开源社区的由来,背后的哲学)
转自译言网:http://article.yeeyan.org/view/88497/59257/ 第一个软件共享社区 当我在1971年开始在麻省理工人工智能实验室工作时, 我成为一个已经存在多年的软 ...
- 用VSCode开发一个基于asp.net core 2.0/sql server linux(docker)/ng5/bs4的项目(2)
第一部分: http://www.cnblogs.com/cgzl/p/8478993.html 为Domain Model添加约束 前一部分, 我们已经把数据库创建出来了. 那么我们先看看这个数据库 ...
- 用VSCode开发一个基于asp.net core 2.0/sql server linux(docker)/ng5/bs4的项目(3)
第一部分: http://www.cnblogs.com/cgzl/p/8478993.html 第二部分: http://www.cnblogs.com/cgzl/p/8481825.html 由于 ...
- 【转载】 github vue 高星项目
内容 UI组件 开发框架 实用库 服务端 辅助工具 应用实例 Demo示例 UI组件 element ★13489 - 饿了么出品的Vue2的web UI工具套件 Vux ★8133 - 基于Vue和 ...
- DUMP1 企业级电商项目
系统:centos6 配置mirror阿里云 https://opsx.alibaba.com/mirror 远程管理首选:ssh 账户密码登录(ssh user@host) 或者 本地私钥连接服务器 ...
- Vue开源项目汇总(史上最全)(转)
目录 UI组件 开发框架 实用库 服务端 辅助工具 应用实例 Demo示例 UI组件 element ★13489 - 饿了么出品的Vue2的web UI工具套件 Vux ★8133 - 基于Vue和 ...
- SpringCloud教程 | 第十一篇: docker部署spring cloud项目
版权声明:本文为博主原创文章,欢迎转载,转载请注明作者.原文超链接 ,博主地址:http://blog.csdn.net/forezp. http://blog.csdn.net/forezp/art ...
随机推荐
- Troubleshooting Autoinvoice Import
metalink :1089172.1 In this Document Purpose Troubleshooting Steps AutoInvoice Execution Repor ...
- Cocos2D将v1.0的tileMap游戏转换到v3.4中一例(四)
大熊猫猪·侯佩原创或翻译作品.欢迎转载,转载请注明出处. 如果觉得写的不好请告诉我,如果觉得不错请多多支持点赞.谢谢! hopy ;) 现在打开MainScene.m文件,首先设置实例变量: @imp ...
- Android光线传感器-android学习之旅(65)
主要讲解光线传感器的使用,其实所有的传感器用法类似 主要是定义一个TextView用来显示光线强度,用完了以后记得在OnDestory里面释放资源 代码如下 public class MainActi ...
- Android 6.0 运行时权限处理问题
序 自从升级到Android M以来,最大的改变就是增加了运行时权限RuntimePermission,6.0以上的系统如果没有做适配,运行了targetSDK=23的App时就会报权限错误.我们知道 ...
- android studio编译慢的问题
1.修改android studio的使用堆内存,根据自己电脑的内存,尽量设置的大一点,点击help->如下图: 2.接下来设置使用离线gradle构建,一开始就是使用了内置的默认路径gradl ...
- C++ Primer 有感(管理类的指针成员)
C++类的指针成员与其他成员有所不同,指针成员指向一个内存地址,该地址的内存需要我没管理. 我现在分析一下为什么要管理指针成员. 有如下Student类,Student.h如下: [cpp] view ...
- #include <iostream>与#include <iostream.h>的区别
在新的C++标准中,生成新头文件的方法仅仅是将现有C++头文件名中的 .h 去掉.例如,<iostream.h> 变成了<iostream> ,<complex. ...
- Cocos2D v3.x中关于重叠触摸层优先级的问题
在Cocos2D v2.x版本中可以通过以下方法设置本层的触摸优先级: [[CCDirector sharedDirector].touchDispatcher addTargetedDelegate ...
- JAVA之旅(十)——异常的概述,Try-Catch,异常声明Throws,多异常处理,自定义异常,Throw和Throws的区别
JAVA之旅(十)--异常的概述,Try-Catch,异常声明Throws,多异常处理,自定义异常,Throw和Throws的区别 不知不觉,JAVA之旅这个系列已经更新到第十篇了,感觉如梦如幻,时间 ...
- 【一天一道LeetCode】#65. Valid Number
一天一道LeetCode 本系列文章已全部上传至我的github,地址:ZeeCoder's Github 欢迎大家关注我的新浪微博,我的新浪微博 欢迎转载,转载请注明出处 (一)题目 Validat ...