《怎样写好程序》PPT课件.ppt

上传人:桔**** 文档编号:573094643 上传时间:2024-08-14 格式:PPT 页数:49 大小:501.50KB
返回 下载 相关 举报
《怎样写好程序》PPT课件.ppt_第1页
第1页 / 共49页
《怎样写好程序》PPT课件.ppt_第2页
第2页 / 共49页
《怎样写好程序》PPT课件.ppt_第3页
第3页 / 共49页
《怎样写好程序》PPT课件.ppt_第4页
第4页 / 共49页
《怎样写好程序》PPT课件.ppt_第5页
第5页 / 共49页
点击查看更多>>
资源描述

《《怎样写好程序》PPT课件.ppt》由会员分享,可在线阅读,更多相关《《怎样写好程序》PPT课件.ppt(49页珍藏版)》请在金锄头文库上搜索。

1、 第15章 怎样写好程序唐大仕http:/内容提要n写好程序的一些经验n编程规范n性能与安全n其他几个技术问题15.1 怎样写好程序经验谈写好“单词”n变量n大小写:变量小写,方法名、类名大写n长度:单个字母的变量只能在三五行内结束n含义:用特定含义,控件用匈牙利命名法n不用temp,it ,do等没有意义的词n常量n数字常量用const或enum或配置n不要从天上掉下来一个数n字符串常量写好“语句”n简单语句n写好赋值语句n使用中间变量n使用括号n分支语句n循环语句n变量局部化写好“函数”n写简单程序n使用卫语句降低层次n语句不要太多n将一段语句提出来,形成新的函数n层次不要太多n将内部语句

2、提出来,形成新的函数n改变算法n如果太复杂了,说明思路还不够清晰写好“对象”n对象的功能是独立的n高内聚n不要太多的成员n处理好对象之间的关系n保存:构造时传入n关联:使用方法n通信:使用事件“定律”n写简单程序n代码永远不要写两遍n推论:永远不要copy代码重构 Refactorn重构改变既有代码的设计15.2 编程规范代码规范n文件结构及名字空间n代码格式n缩进、空格、空行、 、换行n注释nXML注释n命名规范n名字空间、类名、方法、属性 Pascal Casingn接口名用I开头n局部变量、函数参数 Camel Casingn控件可以考虑用“匈牙利命名法”n参见SharpDevelopC

3、odingStyle03.pdfn参见VS_NET 2003 控件命名规范.htmXML注释标标 记记含含 义义标记为代码将多行标记为代码示例异常包含另一个文件列表段落文本参数参数引用访问权限注解返回值参见可参见总述属性值加入XML注释:在VS.NET中输入/NDocnhttp:/ Roeder的Docutmentor编程规范nDesign Guidelines for Class Library Developersnhttp:/ nRelationship to the Common Type System and the Common Language Specification nNa

4、ming Guidelines nClass Member Usage Guidelines nType Usage Guidelines nGuidelines for Exposing Functionality to COM nError Raising and Handling Guidelines nArray Usage Guidelines nOperator Overloading Usage Guidelines nGuidelines for Implementing Equals and the Equality Operator (=) nGuidelines for

5、Casting Types nCommon Design Patterns nSecurity in Class Libraries nThreading Design Guidelines nGuidelines for Asynchronous Programming FxCopnhttp:/ 性能和安全性能是一项功能n设计时就考虑性能n不要在事后再加入性能!n在项目开发的整个过程中反复测试n两种量化Web性能的方法:n1) 机器吞吐率 (requests/sec)n2) 响应时间 (time to first/last bytes)Perfmonn性能计数n开始|运行|Perfmonn点

6、“+”,添加计数器关键的性能计数器n处理器, CPU % 使用率n低数值 = 受阻或者锁竞争nASP.NET, 入列请求数n线性增长意味着服务器已满负荷nASP.NET 应用, 每秒请求数n动态吞吐量 (应当一致)nASP.NET 应用, 总错误数n指示功能错误 (应当是0)nASP.NET 应用, 工作进程重启n指示严重功能错误NProfnhttp:/ http:/ nhttp:/ 高负载测试高负载测试n高负载测试是建立高负载测试是建立scalable web 站点的防御站点的防御性手段性手段n高负载运行可以说明应用的高负载运行可以说明应用的scalability n可用于确定操作的规模可用

7、于确定操作的规模, 何时增加新硬件何时增加新硬件,等等等等n高负载测试不应是构建一个高负载测试不应是构建一个web应用的最后应用的最后一步一步. 它应当贯穿于开发周期中它应当贯穿于开发周期中 n缩小高负载运行缩小高负载运行的范围以获得更准确的范围以获得更准确, 可行动可行动的结果的结果最佳实践n遵循好的设计实践:n逻辑/物理设计n语言选择n基本类库nCOM 交互n数据访问n输出缓存代码性能n.NET 通用语言运行环境 (CLR)n运行性能大幅提高n运行时JIT 编译到本机代码n优化的垃圾回收器n简单问题: 代码分离还是混合?n没有性能差别n简单问题: VB .NET 或者 C#?n没有可觉察的

8、差别, 然而正确使用基本类nStringBuilder与Stringn不要在循环中使用 s+=n参见 StringStringBuilder.csn使用字符代替字符串,如str.IndexOf()n使用集合类nHashtable实现查找n用Array.Sort进行排序n正确使用线程n线程、线程池、Timer性能提高的技巧n避免不必要的执行操作nPage_Load 和 IsPostBackn void Page_Load(Object sender, EventArgs e) n / .set up a connection and command here.n if (!Page.IsPost

9、Back) n String query = select * from Authors where FirstName like %JUSTIN%;n myCommand.Fill(ds, Authors);n myDataGrid.DataBind();n n n void Button_Click(Object sender, EventArgs e) n String query = select * from Authors where FirstName like %BRAD%;n myCommand.Fill(ds, Authors);n myDataGrid.DataBind(

10、);n 性能提高的技巧n不要用Exception控制程序流程ntry nresult = 100 / num;nn catch (Exception e) nresult = 0;n n n if (num != 0) nresult = 100 / num;n elsen result = 0; 数据访问n编写良好的代码对性能至关重要 n不要受阻在数据库服务器上n简单事项, 比如关闭数据库连接n数据代码检查表:n分析并优化数据表索引n利用ADO.NET的输出参数n推荐: 使用存储过程n可以消除数据库的往返访问n通过使用数据库事务而避免分布式事务的耗费.NET 数据访问n.NET中多种数据访问

11、方法nSQL vs. OLEDB vs. ODBC数据提供者nDataReaders vs. DataSetn数据提供者选择:n使用SQL服务器时使用Data.SqlClient中的类型n推荐:nDataReader: 用于只进的只读访问nDataSet: 用于缓存或者Web服务使用缓存 n什么是缓存?n缓存的三种方式:n页输出缓存n页片断缓存n数据缓存 应用的安全考虑 n修改数据库的文件名和扩展名,尽量让别人猜不出来。 n因为授权只对.aspx文件有效,对HTML文件无效。解决方法是修改扩展名为.aspx。n数据库中用户密码也可以加密n(关于加密请看后面示例)System.web.secur

12、ityn此命名空间包含用于在 Web 服务器应用程序中实现 ASP.NET 安全性的类。n在ASP.NET中我们需要额外的对象加密。HashPasswordForStoringInConfigFile方法非常容易使用,并且,它支持“SHA1”和“MD5”散列算法。加密与解密nSystem.Security.Cryptographyn使用CryptoStream加密示例FileStream stream = new FileStream(“C:test.txt”,FileMode.OpenOrCreate,FileAccess.Write);DESCryptoServiceProvider cr

13、yptic = 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!

14、”);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

15、.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();敏感数据nDo avoid secrets when you cannConsider using integrated au

16、thenticationnUse layered protection when you need secretsnAccess control settingsnData Protection API (DPAPI)nUse aspnet_setreg for ASP.NET secretsn, , nhttp:/ ASP.NET validation controlsn使用 regular expressions (如 web service parameters)n在服务端再次进行验证n使用参数,而不是直接连接SQL语句SQL Injection如何工作SELECT COUNT (*)

17、FROM UsersWHERE UserName= or 1=1-AND Password=SELECT COUNT (*) FROM UsersWHERE UserName=JeffAND Password=imbatman应用中的应用中的Query模型模型恶意的恶意的Query语句语句or 1=1 matches everyrecord in the table- comments out theremainder of the query15.4 几个技术问题代码的安全IL代码n学习IL代码:参见IL目录下的文档n使用ILDASM,进行反汇编nC:Program FilesMicroso

18、ft Visual Studio .NETFrameworkSDKBinildasm.exen使用ILASM,进行汇编、连接nC:WINNTMicrosoft.NETFrameworkv1.0.3705ilasm.exe“n参见ILHello目录下的文件Reflectorn能将程序反编译nLutz Roedernhttp:/ n插件Reflector.FileDisassembler.zipObfuscaten代码混淆器n对类、方法、变量等进行更名n加密字符串n打乱流程n加入特定字节,使反编译程序不能工作n有很多这样的产品nDotfuscator()nDeploy.NETnRemoteSoft、Thinstall、XenoCode反射与插件nReflectionnPlugin问题与讨论

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 高等教育 > 研究生课件

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号