ASP.NET项目开发一些琐碎的积累

1.过滤危险的字符串,诸如“=”、“>”等可能会诸如数据库的危险字符串,我看过很多人做的网页仅仅进行客户端脚本验证是不够的。必须在服务器段的后台代码里面也进行数据验证,我曾经编写过一个程序可以绕过脚本验证提交表单。

2.判断字符串可否转换成整形、字符型、还是浮点型等

3.错误处理,如果简单的站点需要配置一下写一下Application_Error事件就可以了。复杂的站点需要编写日志类,来处理

使用记录站点出现的异常。

4.经常用地的Request.QueryString操作。最好写成公共的处理方法以返回需要的类型数据。具体可以参考动网论坛的.

5.根据站点的规模以及功能划分出几个区域分别基础Page类。诸如:后台管理界面、用户中心、帮助中心、Ajax处理。还需要注意网页内容是否需要在客户端存储。如果开发的项目自己公司的同时需要进行维护,同时应该考虑Js脚本文件的变化,因为如果需要增加JS代码可能每个页面都要增加,所以最好的输出脚本的方式就是定义公共的类。我们所经常用到Page对象的ClientScript属性并不能完成所有功能的脚本注册,如果你想写一个公共的Page类并且向头部输出js,那ScriptManger是不能完成的。它仅限于向Body元素内部输出脚本。一般我会这个往头部添加脚本

HtmlGenericControl js= new HtmlGenericControl("script"); 
js.Attributes.Add("type", "text/javascript"); 
js.Attributes.Add("src","test/123.js"); 
this.Page.Header.Controls.Add(js); 

以后如果每个页面都需要添加Js文件可以直接在基类中添加就可以了。

这个道理同样适用于数据库开发,比如PetShop中用到了四个数据库分别存放主题数据、订单中心、客户数据等根据不同的模块来划分数据库。划分的原则就是:表直接联系特别密切的划分到一个数据库中,比较松散的划分的两个数据库中。这样便于后期的管理与维护(当然,如果是租用空间还是就不要考虑这个了,因为托管服务器买数据库也需要钱的。。多个数据库多点投入,这样的客户还是用一个省事)。

6.经常用的的消息弹出框最好也单独写一个类来进行处理。还有获取主机IP、简体字繁体直接的转换、字符的加密解密、Cookie操作、文件操作、URL操作(获取根目录URL等,经常在用户控件中会用到,一个用户控件可能会被几个不属于一个

目录层次的Page调用,如果该用户控件上有图片、JS文件路径就会需要获取根目录的URL)

7.必须了解软件的运行环境是在机房托管的服务器还是租用的空间?托管的服务器开发限制较少。如果是租用的空间限制比较大,好多功能不能用,如果是机房托管的服务器灵活性就比较大了。

8.注意在代码中应用的sql语句,注意变量的类型与sql中数据类型相对应,如

string a="45454";
string sql="SELECT * FROM [Customer] customerID="+a.ToString();

编译的时候并没有错,执行的时候也就有问题了。。进入SQL中执行的时候“45454”就会被解释成整形了。如果超出数据范围就会出现异常。这时候就需要的了''(单引号)

string a="45454";
string sql="SELECT * FROM [Customer] customerID='"+a.ToString()+"'";

9.编码过程中最大限度的实现功能的模块化。如果一个页面上有查过两个以上的功能区域,做好把每个区域做成用户控件,用户控件之间尽可能少的了解的其他用户控件。可以通过session、Cookie 来共享数据。模块化不仅有利于代码移植,而且便于代码修改于阅读。

10.网站设计过程中应该仔细的考虑缓存的设计,这样可以大幅度的提高性能。一般来说读取数据库比读取普通硬盘上的文本文件要慢一些,所以我经常缓存一些XML文件到Cache中。测试一下就会发现性能提升时很明显的事情。

11.设计的时候针对不同的项目必须考虑其变化点。我经常做一些电子商务平台的软件。最大的变化点就业经常变更的销售策略,从配送发货到商品打折,经常会变化,对于项目来说就是业务逻辑层经常地变动。所以写代码的时候最好可以把变化点进行分离出来,业务的逻辑的处理最好编写单独的模块,经常用到的字符也可以转换成一个类的常量单独存储。

12.对于数据库的完整性虽然约束不支持跨数据的,但是触发器却支持。当需要数据实现联动的时候处理用C#代码来针对每个表来处理之外,也可以采用触发器实现多个表之间的数据同步。但是触发器是在其他外键约束没有作用的是时候才会采用的,因为触发器作为约束来使用并没有外键那么强。

13.好的编码规范是才能保证良好的程序结构与可读性。如果开发项目前做编码规范那么即使代码结构再好,其可读性也会大大降低。多说一下数据库的命名吧。一般的一个中型项目少说也得100多个表,如果名字命名的不好后期维护人员看着是很头痛的。一般表名最好采用前缀、后缀来安功能或区域来划分。存储过程最好采用表名+“_”+动词的方式来命名便于以后维护,名字不要太短。

.NET开发的一些积累的更多相关文章

  1. ANDROID开发之问题积累及解决方案(一)

    一.activity跳转及传值 当进行activity之间的跳转时我们会遇到这样的问题.首先熟悉下activity之间跳转.Activity跳转与传值,主要是通过Intent类来连接多个Activit ...

  2. Android 开发有用代码积累

    Android开发需求变化快,开发周期要求尽量短,接下来一系列文章从实际使用出发总结一些常用的代码片段,便于查找,也为后来人提供一份参考. 1.获取Manifest的基本信息(升级页面和软件关于页面一 ...

  3. wordpress开发的一些积累

    wordpress 攒知识点 记录开发 wordpress 的一些技能点,以备不时之需 短代码 Shortcode 虽然很多插件都是提供,直接在代码中插入类似[Shortcode] 便可以生效,但是很 ...

  4. ANDROID开发之问题积累及解决方案(二)

    错误:“Binary XML file line # : Error inflating class” 原因:此异常是布局文件中有错引起的,那么返回到布局文件中看看. <?xml version ...

  5. iOS开发 日常错误积累

    1.ios7 tableviewcell上面加入一个view,view上面有button,点击button不运行button的点击事件 解决的方法: self.view.userInteraction ...

  6. ANDROID开发之问题积累及解决方案(四)

    首先贴出问题类型: 程序无法启动,查看logcat,提示如下信息: W/dalvikvm(679): PR_CAPBSET_DROP 32 failed: Invalid argument. Plea ...

  7. ANDROID开发之问题积累及解决方案(三)

    1.dexDebug ExecException finished with non-zero exit value 2需要在gradle中配置下面的代码,原因是引用了多个libraries文件 de ...

  8. 如何站在使用者的角度来设计SDK-微信公众号开发SDK(消息处理)设计之抛砖引玉

    0.SDK之必备的基本素质 在项目中免不了要用到各种各样的第三方的sdk,在我现在的工作中就在公司内部积累了各种各样的的公共库(基于.net的,基于silverlight的等等),托管到了内部的nug ...

  9. 微软颜龄Windows Phone版开发小记

    随着微软颜龄中文网cn.how-old.net的上线,她也顺势来到了3大移动平台. 用户在微软颜龄这一应用中选择一张包含若干人脸的照片,就可以通过云计算得到他们的性别和年龄. 今天我们就和大家分享一下 ...

随机推荐

  1. 【golang】使用rpcx不指定tags报错 undefined: serverplugin.ConsulRegisterPlugin

    为了避免引入不必要的库, rpcx采用了 Go 条件编译 的特性, 你可以只引入必要的特性. 比如你只使用 etcd 作为注册中心的时候, 你不希望引入 consul.zookeeper相关的库,你需 ...

  2. Linux帮助指令

    1.介绍 当我们对某个指令不熟悉时,我们可以使用Linux提供的帮助指令来了解这个指令的使用方法. 2.man 指令获得帮助信息 基本语法 man  [命令或者配置文件]    (功能描述:获得帮助信 ...

  3. PHP无法使用curl_init()函数

    主要针对在Ubuntu16.04搭建CRMEB环境时,监测环境会出现一个curl_init问题,这时只需执行如下命令即可解决: sudo apt-get install php-curl

  4. python format 时间格式

    trainData['survey_time'] = pd.to_datetime(trainData['survey_time'],format = '%Y/%m/%d %H:%M') trainD ...

  5. 第06组 Alpha冲刺(2/6)

    队名:拾光组 组长博客链接 作业博客链接 团队项目情况 燃尽图(组内共享) 组长:宋奕 过去两天完成了哪些任务 主要完成了上传照片模块的信息采集 具体完成了采集用户上传的照片信息.分析图像数据.比对数 ...

  6. Laravel中的Storage::disk

    Laravel中的Storage::disk 一.总结 一句话总结: Storage的disk的路径和file的路径都是一回事,都是config/filesystems.php配置文件中disks 比 ...

  7. vue 遇到防盗链 img显示不出来

    在index.html中添加: <meta name="referrer" content="no-referrer">

  8. PHP是单线程还是多线程?

    PHP 从设计之初到流行起来都没有出现明显需要用多线程才能解决的需求.某些需要用到多线程的地方也有相应的解决方案和替代方案.多线程并不总是比单线程优,多线程可能会引入其他问题(例如:两个线程同时调用一 ...

  9. springMVC Controller 参数映射

    springMVC 对参数为null或参数不为null的处理 - 小浩子的博客 - CSDN博客https://blog.csdn.net/change_on/article/details/7664 ...

  10. PHP如何实现静态的链式调用

    Db::table('**')->where('***','***')->order('***')->find('**'); 想这种应该怎么实现 public function ta ...