已阅读5页,还剩44页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第15章 怎样写好程序,内容提要,写好程序的一些经验 编程规范 性能与安全 其他几个技术问题,15.1 怎样写好程序经验谈,写好“单词”,变量 大小写:变量小写,方法名、类名大写 长度:单个字母的变量只能在三五行内结束 含义:用特定含义,控件用匈牙利命名法 不用temp,it ,do等没有意义的词 常量 数字常量用const或enum或配置 不要从天上掉下来一个数 字符串常量,写好“语句”,简单语句 写好赋值语句 使用中间变量 使用括号 分支语句 循环语句 变量局部化,写好“函数”,写简单程序 使用卫语句降低层次 语句不要太多 将一段语句提出来,形成新的函数 层次不要太多 将内部语句提出来,形成新的函数 改变算法 如果太复杂了,说明思路还不够清晰,写好“对象”,对象的功能是独立的 高内聚 不要太多的成员 处理好对象之间的关系 保存:构造时传入 关联:使用方法 通信:使用事件,“定律”,写简单程序 代码永远不要写两遍 推论:永远不要copy代码,重构 Refactor,重构改变既有代码的设计,15.2 编程规范,代码规范,文件结构及名字空间 代码格式 缩进、空格、空行、 、换行 注释 XML注释 命名规范 名字空间、类名、方法、属性 Pascal Casing 接口名用I开头 局部变量、函数参数 Camel Casing 控件可以考虑用“匈牙利命名法” 参见SharpDevelopCodingStyle03.pdf 参见VS_NET 2003 控件命名规范.htm,XML注释,加入XML注释: 在VS.NET中输入/,NDoc,/ NDoc文档生成工具 另外: 在csc命令中用/doc:选项 在VS.NET中,在项目的属性中 选择生成文档 使用Lutz Roeder的Docutmentor,编程规范,Design Guidelines for Class Library Developers /library/default.asp?url=/library/en-us/cpgenref/html/cpconnetframeworkdesignguidelines.asp Relationship to the Common Type System and the Common Language Specification Naming Guidelines Class Member Usage Guidelines Type Usage Guidelines Guidelines for Exposing Functionality to COM Error Raising and Handling Guidelines Array Usage Guidelines Operator Overloading Usage Guidelines Guidelines for Implementing Equals and the Equality Operator (=) Guidelines for Casting Types Common Design Patterns Security in Class Libraries Threading Design Guidelines Guidelines for Asynchronous Programming,FxCop,/team/fxcop/,数据库设计规范,参见数据库开发规范.htm,界面规范,参见网站软件开发规范.htm,开发文档规范,需求分析 概要设计 详细设计 参见国家软件开发标准.rar,15.3 性能和安全,性能是一项功能,设计时就考虑性能 不要在事后再加入性能! 在项目开发的整个过程中反复测试 两种量化Web性能的方法: 1) 机器吞吐率 (requests/sec) 2) 响应时间 (time to first/last bytes),Perfmon,性能计数 开始|运行|Perfmon 点“+”,添加计数器,关键的性能计数器,处理器, CPU % 使用率 低数值 = 受阻或者锁竞争 ASP.NET, 入列请求数 线性增长意味着服务器已满负荷 ASP.NET 应用, 每秒请求数 动态吞吐量 (应当一致) ASP.NET 应用, 总错误数 指示功能错误 (应当是0) ASP.NET 应用, 工作进程重启 指示严重功能错误,NProf,/ 可以测试每个方法的调用时间,NPerf,NTime,一个测试框架,通过编程来使用 参见 /gen/design/nperf.asp / /dotnet/NTime.asp,高负载测试,高负载测试是建立scalable web 站点的防御性手段 高负载运行可以说明应用的scalability 可用于确定操作的规模, 何时增加新硬件,等等 高负载测试不应是构建一个web应用的最后一步. 它应当贯穿于开发周期中 缩小高负载运行的范围以获得更准确, 可行动的结果,最佳实践,遵循好的设计实践: 逻辑/物理设计 语言选择 基本类库 COM 交互 数据访问 输出缓存,代码性能,.NET 通用语言运行环境 (CLR) 运行性能大幅提高 运行时JIT 编译到本机代码 优化的垃圾回收器 简单问题: 代码分离还是混合? 没有性能差别 简单问题: VB .NET 或者 C#? 没有可觉察的差别, 然而,正确使用基本类,StringBuilder与String 不要在循环中使用 s+= 参见 StringStringBuilder.cs 使用字符代替字符串,如str.IndexOf() 使用集合类 Hashtable实现查找 用Array.Sort进行排序 正确使用线程 线程、线程池、Timer,性能提高的技巧,避免不必要的执行操作 Page_Load 和 IsPostBack void Page_Load(Object sender, EventArgs e) / .set up a connection and command here. if (!Page.IsPostBack) String query = “select * from Authors where FirstName like %JUSTIN%“; myCommand.Fill(ds, “Authors“); myDataGrid.DataBind(); void Button_Click(Object sender, EventArgs e) String query = “select * from Authors where FirstName like %BRAD%“; myCommand.Fill(ds, “Authors“); myDataGrid.DataBind(); ,性能提高的技巧,不要用Exception控制程序流程 try result = 100 / num; catch (Exception e) result = 0; if (num != 0) result = 100 / num; else result = 0;,数据访问,编写良好的代码对性能至关重要 不要受阻在数据库服务器上 简单事项, 比如关闭数据库连接 数据代码检查表: 分析并优化数据表索引 利用ADO.NET的输出参数 推荐: 使用存储过程 可以消除数据库的往返访问 通过使用数据库事务而避免分布式事务的耗费,.NET 数据访问,.NET中多种数据访问方法 SQL vs. OLEDB vs. ODBC数据提供者 DataReaders vs. DataSet 数据提供者选择: 使用SQL服务器时使用Data.SqlClient中的类型 推荐: DataReader: 用于只进的只读访问 DataSet: 用于缓存或者Web服务,使用缓存,什么是缓存? 缓存的三种方式: 页输出缓存 页片断缓存 数据缓存,应用的安全考虑,修改数据库的文件名和扩展名,尽量让别人猜不出来。 因为授权只对.aspx文件有效,对HTML文件无效。解决方法是修改扩展名为.aspx。 数据库中用户密码也可以加密 (关于加密请看后面示例),System.web.security,此命名空间包含用于在 Web 服务器应用程序中实现 ASP.NET 安全性的类。 在ASP.NET中我们需要额外的对象加密。HashPasswordForStoringInConfigFile方法非常容易使用,并且,它支持“SHA1”和“MD5”散列算法。,加密与解密,System.Security.Cryptography 使用CryptoStream,加密示例,FileStream stream = new FileStream(“C:test.txt”,FileMode.OpenOrCreate,FileAccess.Write); DESCryptoServiceProvider cryptic = new DESCryptoServiceProvider(); cryptic.Key = ASCIIEncoding.ASCII.GetBytes(“ABCDEFGH”); cryptic.IV = ASCIIEncoding.ASCII.GetBytes(“ABCDEFGH”); CryptoStream crStream = new CryptoStream(stream,cryptic.CreateEncryptor(),CryptoStreamMode.Write); byte data = ASCIIEncoding.ASCII.GetBytes(“Hello World!”); crStream.Write(data,0,data.Length); crStream.Close(); stream.Close();,解密示例,FileStream stream = new FileStream(“C:test.txt”,FileMode.Open,FileAccess.Read); DESCryptoServiceProvider cryptic = new DESCryptoServiceProvider(); cryptic.Key = ASCIIEncoding.ASCII.GetBytes(“ABCDEFGH”); cryptic.IV = ASCIIEncoding.ASCII.GetBytes(“ABCDEFGH”); CryptoStream crStream = new CryptoStream(stream,cryptic.CreateDecryptor(),CryptoStreamMode.Read); StreamReader reader = new StreamReader(crStream); string data = reader.ReadToEnd(); reader.Close(); stream.Close();,敏感数据,Do avoid secrets when you can Consider using integrated authentication Use layered protection when you need secrets Access control settings Data Protection API (DPAPI) Use aspnet_setreg for ASP.NET secrets , , /default.aspx?scid=kb;EN-US;329290,输入验证,一定要验证所有的输入数据 使用 ASP.NET validation controls 使用 regular expressions (如 web service parameters) 在服务端再次进行验证 使用参数,而不是直接连接SQL语句,SQL Injection如何工作,15.4 几个技术问题,代码的安全,IL代码,学习IL代码:参见IL目录下的文档 使用ILDASM,进行反汇编 “C:Program FilesMicrosoft Visual Studio .NETFrameworkSDKBinildasm.exe“ 使用ILASM,进行汇编、连接 “C:WINNTMicrosoft.NETFrameworkv1.0.3705ilasm.exe“ 参见ILHello目录下的文件,R
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2026年河北省泊头市高三数学下册期末考试模拟考试卷【原创题】附答案
- 2026年四川省康定市高三数学下册期末考试模拟卷附答案【轻巧夺冠】
- 2026年四川省彭州市高三数学下册期末考试模拟检测卷(综合卷)附答案
- 2026年山西省侯马市高三数学下册期末考试模拟检测卷含答案(突破训练)
- 2026年湖北省大冶市高三数学下册期末考试模拟试卷及答案(有一套)
- 2026年湖北省恩施市高三数学下册期末考试模拟卷及答案(历年真题)
- 人力资源部长人力资源规划绩效考核表
- 企业数字化营销战略制定手册
- 团队创新能力与成果转化绩效衡量表
- 阅读理解题型分类练(六) 主旨大意题-文章大意类课件高三英语复习
- 《变电站基础知识》课件2
- 口腔门诊病历书写规范培训课件
- 新生儿转运箱使用
- 北师大版数学六年级上册第一次月考测试题及答案
- 幼儿园课程:爱祖国爱家乡
- 水工混凝土结构设计规范sl191-2008
- 山西省建筑工程施工安全资料管理规程表格部分
- 2023年4月2日湖北省事业单位联考A类《职业能力倾向测验》真题及答案
- 丰田技术员培训手册13原厂p01t
- 《服务设计 用极致体验赢得用户追随》读书笔记思维导图PPT模板下载
- GB/T 16422.2-2022塑料实验室光源暴露试验方法第2部分:氙弧灯
评论
0/150
提交评论