读 构建高质量的C#代码

    在实际的项目开发过程中,每一个组件或模块都可以拿来作为单独的一块系统的学习,比如:异常处理、流操作、配置管理、基础代码库、通用代码处理、静态资源管理、代码调试(高级调试)、数据处理、编码习惯、高质量代码的准则、文件 网络操作、日志记录等,组件和模块逐步细化 持续构建成整个软件系统,不管是web开发、客户端还是手机等其他应用类软件,模块化和多层架构都是不可少的。下面记录了一些代码的准则和凌乱的知识清单,看书时记录的一些关键字,没有梳理清楚写出来,有的还只是标题 。详细的请参照: 《构建高质量的C#代码》 曹华宇 这本书

一、语句控制
if语句
1、将最常见的条件放到第一个if语句后,这样代码的逻辑关系会更直观;
2、对于非常复杂的逻辑判断可以考虑用一个方法来替换;
3、考虑到条件判断的每一种情况;
4、对于有一个条件而有多个结果的情况 使用switch代替if;
5、嵌套使用中 处理完一个语句后注意适时退出;

switch语句
1、跳出循环break,直接退出时用return语句;
2、case  ...case 保证每一个case语句都能够准确贯穿或结束;
3、按一定的顺序排列每一个值,比如按照数字、字母的顺序或按照数字可能出现的频率,如下:
case 1:
case 2:
...

todo
break;
4、应使用defaul语句处理所列值之外的情况,比如默认处理方式、处理异常等;


while语句
1、防止无限循环;
2、再循环体内注意条件的变化,确保能够结束循环;
3、若要使用无限循环应保证在某一个条件时能够终止循环;



软件开发的一般流程
1、获取用户需求并逐步细化,找到行业用户;
2、正确设计架构
当确认用户需求后,还需要熟悉用户的计算机环境、平台、内部网络,综合业务流程进行软件的架构设计,这还包括:基本功能代码库、通用代码库、业务流程代码库、数据管理模式等;
3、编写高质量的代码并持续构建;
4、进行完整有效的测试并进行高质量的集成;
5、保留代码记录,使用项目文档、代码注释、代码管理工具如svn或git;
6、项目跟进与代码整理,原则:正确性、稳定性、高性能;
7、模式化相同或相似类型项目的开发,有效提高开发效率,应充分利用基础代码和软件架构来实现高质量专业化的软件。


高质量代码准则:
1、可阅读
2、可维护性  (注释你的代码、重构你的代码)
3、用实践证明一切
4、参照msdn帮助文档



代码的进化
代码都是由无到集成,如下:
无->有->基础代码->代码单元->组件{对象、类、接口、集合 }->代码集成->架构->整个软件系统

设计模式:对开发中不断出现的问题、相同不同的问题进行总结、实践整理出来的一系列的相对应的解决方案。借助设计模式的特点来提高代码的质量。

改进代码的过程:
1、实现功能
2、备份代码
3、找出一个不足的地方,尝试新的设计方案比如去除应用去除模式
4、验证合理性和有效性


C#预处理
C#代码的组织形式,namespace 、.cs文件、类文件中有方法 属性 字段等,类中的代码才是最终要执行的;
项目中的property文件 ,有关项目的属性、参数设置如启动资源管理、编译设置等


迭代器模式
提供一种方法顺序访问集合中的各个元素,而又不需要暴露该对象的内部表示,即是实现IEnumable接口。
使用者无须了解内部即可遍历或处理这些集合成员

迭代器和枚举器可以参照:System.Collection  下的IEnumable  IEnumberator
system.collection.Generic 下的集合Ienumable<T>  IEnumberator<T>


模板方法模式
主要功能就是制定一系列算法的结构,然后由不同的子类分别实现这些算法,使用者可以使用相同的方法使用这些组件  ,以减少学习成本比如ADO.net下的Command类,如下图:



适配器模式
创建一个适配器组件作为一个“中间人” 它将提供接口转换功能,使两个不相关或不兼容的组件可以一起工作,比如手机充电器、SqlDataAdapter类等
可以参照微软的SqlDataAdapter、OracleDataAdapter、OledbAdapter等


适配器就是用于做接口转换操作,它本身也可以做具体的工作


异常处理
1、try  catch finally ,发生异常且无return突然中断时,finally最终都要执行的,内做一些相同的操作比如清理工作、文件、流关闭等
2、throw语句 向上层抛出异常,外层无catch捕获时只能由系统捕获异常了
3、异常分为两大类,可以预知的错误、真正的异常情况;Exception类是所有异常类的基类,无特殊情况下又是可预知类异常,为了解异常的详细信息使用具体的异常类进行捕获;
4、项目中使用统一的异常处理机制
在一定规模的软件项目中,随心所欲的处理异常的形式可能会带来代码上的混乱,并且导致难以阅读和调试,应该使用统一的机制,考虑以下几个问题:
(1)信息的呈现方式,winform中可以是直接message.box提示,web中就不支持这种,在不同的项目中使用合适的方式呈现给用户;
(2)正确的处理用户的信息
(3)统一的异常处理方法,可以大量重用代码,便于维护


代码调试
1、代码块先确定起始点终止点,在填写语句块
2、代码层次要清晰,复杂的逻辑处理超过一个屏的代码段不是很容易就能对应上,可以统一的在结束处加上注释;
3、代码调试,F11,F10,断点条件,使用即时调试窗口,监视等查看运行结果
4、添加测试代码,使用输出或提示方法,比如:Console.Write、alert,messagebox等,实现一个功能块时实例化一个对象并进行测试;做单元测试


类的作用
1、算法和逻辑的封装,隐藏细节 封闭 安全
2、模块化设计将程序代码和功能化整为零
3、模拟现实世界的操作方式
4、有利于代码的重复使用
5、创建复杂的数据类型,对逻辑封装简化操作
6、对功能代码进行分类包装


实例化类时需要初始化操作,销毁对象时需要释放清理操作,分别对应类中的构造函数和析构函数


构造函数链
前提:构造函数有很多重载,且都有初始化等重复操作,可以使用函数链处理
1、创建最完整的构造函数,并完成初始化操作;
2、创建其他参数列表的构造函数,并继承最完整的那个,对多出来的参数使用一个合适的默认值;
举例:  
 class human
   {
       string name;
       int age=0;
       public human(string name,int age)
        {
           this.name=name;
           this.age=age;
        }
        public human(string name):this(name,0){}
        public human(int age):this("",age)
   }
与
 class human
   {
       string name;
       int age=0;
       public human(string name,int age)
        {
           this.name=name;
           this.age=age;
        }
        public human(string name)
       {
           this.name=name;    
       }
        public human(int age)
       {
           this.age=age  
       }
   }
等价。


方法
1、方法的参数有值类型、引用类型、输出参数、参数数组
值类型的参数,使用过程中,将在方法内复制实参的数值进行处理 而不是直接操作实参的数据;
引用类型的参数则会直接操作参数的实参(即操作地址)

引用类型的参数和输出参数基本上是一样的,在调用时都会直接操作实参的地址,不同的是引用参数需要赋初始值,输出参数使用的场景:一个方法只能返回一个结果,但是还需要返回另一个结果时;

参数数组,比如控制台应用程序的入口函数的参数,方法的参数类型是一样的,只是数量上不一样,可以使用params + 数组(如string[]),参数数组应该放在所有参数的后面

  高质量方法的准则
1、起个好名字
2、参数也要有一个好名字
3、参数不宜过多,过多的情况下:(1)使用方法重载,(2)将参数包装成一个结构或类,使用时传递结构变量或对象
4、合理使用引用参数和输出参数,试想随便传过去一个参数,结果未知,造成方法不安全性,慎用
5、防御性编程,对入方法内的参数进行合法性检查
6、功能最小化,一个方法只做一件事


静态类
使用场景:创建功能性代码库,即对一些功能性的代码进行封装,很少变化的代码

高质量类准则
1、功能最小化
2、成员访问性最小化,应只为使用者提供最小功能接口
3、防御性编程,不要对使用者有任何假设
4、检查你的代码,即测试

重构:能够随时随地检查和分析你的代码,通过不断的重构来改进和优化代码,重要的是用实践来测试和验证改进的合理性、正确性、有效性

继承
作用:通过继承实现代码的复用最大化的目的,避免大量代码的重复书写;对一系列功能相同或相似的类的结构和功能进行规范,实现代码结构标准化

主要特点之一:可以对类的功能进行扩展

1、子类中使用基类同名的成员使用new进行隐藏
隐藏的方法可以使用关键字base/this来进行调用
2、virtual关键字修饰的成员称为虚成员,与隐藏不同,重写的只能是类的方法、属性、索引器、事件,隐藏可以是类的各种成员;
©️2020 CSDN 皮肤主题: 大白 设计师:CSDN官方博客 返回首页