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. Windows 10操作系统中的邮件应用

    早期的邮件收发软件Outlook express曾被广泛使用,然而现在却很难下载到,在Windows 10操作系统中也无法使用. 实际上,Windows 10中存在“邮件”应用,可以直接作为邮件的收发 ...

  2. Java 死锁以及死锁的产生

    public class DeadLockSample { public static void main(String[] args) { DeadLock d1 = new DeadLock(tr ...

  3. ZR#985

    ZR#985 解法: 可以先假设每个区间中所有颜色都出现,然后减掉多算的答案.对每种颜色记录它出现的位置,则相邻两个位置间的所有区间都要减去,时间复杂度 $ O(n) $ . 其实可以理解为加法原理的 ...

  4. ICEM-hollow

    原视频下载地址: http://yunpan.cn/cumt7U7ufYfA3  访问密码 a46d

  5. 一个想要拥有正常的F1~F12的联想小新潮

    联想如何切换至正常的F1~F12 Fn+Fx的生活让我疲倦,实在难受,就开始了尝试关闭Fn 问题一:无法打开BIOS设置界面 重启,在开机界面时,按F2???顺利开机-(相较于台式机开机时,可以按F2 ...

  6. 第十七周助教工作总结——NWNU李泓毅

    助教博客链接:https://www.cnblogs.com/NWNU-LHY/ 本次作业的要求:软件测试与ALPHA冲刺:https://www.cnblogs.com/nwnu-daizh/p/1 ...

  7. 利用pgAgent创建定时任务

    使用Postgresql自带的pgAgent,可以很方便地创建定时执行任务.现在网上的资料都比较旧,Postgresql版本更新得比较快,导致网上的一些教程都不合用了,现在我写分享一下自己的经验. P ...

  8. Android Mboot mmc命令介绍

    mmc command.         目前Mboot支持以下mmc命令: 1) mmc read/write.    读写命令.Addr = 内存地址, blk# = 起始block数, size ...

  9. python-learning-第二季-画图matplotlib

    https://www.bjsxt.com/down/8468.html 绘制方法: 绘制直线: #coding:utf- import matplotlib.pyplot as plt #准备绘制的 ...

  10. 004-行为型-05-职责链模式(Chain of Responsibility)

    一.概述 为请求创建一个接收此次请求对象的链 该模式构造一系列分别担当不同的职责的类的对象来共同完成一个任务,这些类的对象之间像链条一样紧密相连,所以被称作职责链模式. 在这种模式中,通常每个接收者都 ...