多线程,异步,任务和并行
1.异步和多线程应用场景区分
多线程 计算密集型工作
异步 IO密集型工作
2.线城同步中使用信号量
EventWaitHandle AutoResetEvent ManualResetEvent
Semaphore
Mutex
3.避免锁定不恰当的同步对象
1.需要同步的多个线程中是可见的同一个对象
2.非静态方法,静态变量不能作为同步对象
3.值类型对象不能作为同步对象
4.避免将字符串作为同步对象
5.降低同步对象的可见性
4.警惕线城的IsBackground
前台线城->线城不结束,主进程不结束
后台线城->主进程结束,线城自动结束
5.警惕线城的优先级
Thread.Priority = ThreadPriority.Highest
6.正确的关闭线城
CancellationToeknSource类的Token.isCancellationRequested方法
7.用ThreadPool或BackgroundWorker代替Thread
8.PLINQ
varqueryParaller1 = from p in intList.AsParallel().AsOrdered() select p;
queryParalle1.ForAll((item) =>…});
架构篇
成员设计
1.谨慎将数组或集合作为属性
public Ilist<Object> Employees {get;private set;}
2.构造方法应初始化主要属性和字段
3.区别对待override和new
子类方法中带有new-> 独立于基类的方法
子类方法中带有override->调用该方法,而非基类的方法
4.成员应优先考虑公开基类或接口
public Ienumberable<Tresult> Empty<Tresult>(){return EmptyEnumerable<Tresult>.Instance;}
5.优先考虑将基类型或接口作为参数传递
public static Ienumberable<Tsource> Task<Tsource>(this Ienumberable<Tsource>source, int count)
6.用params减少重复参数
void Method(string str, params object[] args){}
7.静态方法和实例方法没有区别
8.使用扩展方法,向现有类型“添加“方法
public static string GetSexString(this Student student){return "";}
优点 可以扩展密封类型
可以扩展第三方程序集中的类型
扩展方法可以避免不必要的深度继承体系
约定 扩展方法必须放在静态类中,且该类不能是嵌套类
扩展方法必须是静态的
扩展方法的第一个参数必须是要扩展的类型,且必须加上this
不支持扩展属性,事件(能扩展接口,例如Linq)
类型设计
1.区分接口和抽象类的应用场合
区别 接口支持多继承,抽象类则不能
接口可以包含方法,属性,索引器,事件的签名,但不能有实现,抽象类可以
接口新增方法后,所有继承者都需要重构,抽象类不需要
场景 对象存在多个功能相近且关系紧密,使用抽象
关系不紧密,若干功能有共同的声明,使用接口
抽象适用于提供丰富功能的场合,接口倾向于提供单一的一组功能
实例 流(stream):抽象 类型(Object):接口
2.多态代替条件语句
3.使用私有化构造函数强化单例
4.静态类添加静态构造函数
特点 只被调用一次,且在第一次调用类成员之前被运行时执行
代码无法调用它,不像实例构造方法使用new就能执行
没有访问标识符
不能带任何参数
5.sealed:组织类型被其它类继承
6.类代替enum
7.避免双向耦合
A调用B,B调用A
8.将现实世界的对象抽象为类,将可复用对象圈起来就是命名空间
安全性设计
1.声明变量前考虑最大值
ushort最大后会变为0,使用checked{}来抛出此类异常
2.MD5不在安全
3.通过HASH来验证文件是否被篡改
using(MD5CryptoServiceProvider md5 = new MD5CryptoServiceProvider()){
using(FileStream fs = new FileStream(filePath, FileMode.Open, FileAccess.Read, FileShare.Read)){
return BitConvert.ToString(md5.ComputeHash(fs)).Replace(""-"", """");
}
}
4.避免非对称算法加密文件
5.使用SSL确保通信中的数据安全
6.使用SecureString保存密钥等机密字符串
static Ssytem.Security.SecureSeting secureString = new SecureString();
保存:secureString.AppendChar('w');
取:IntPtr addr = Marshal.SecureStringToBSTR(secureString);
string temp = Marshal.PtrToStringBSTR(addr);
释放:Marshal.ZeroFreeBSTR(addr);
7.不要使用自己的加密算法
DES,AES,RC4,RSA,TEA,MD5
密钥是关键
8.为程序集指定强名称
sn -k yourprofile.snk
命名规范
以<Company>.<Component>为命名空间
用名词和名词组给类型命名
用形容词组给接口命名
派生类的名词以基类的名字作为后缀
泛型类型参数以T作为前缀
以复数命名枚举类型,以单数命名枚举元素
用PascalCasing命名公开元素
考虑用类名作为属性名
用camelCasing命名私有字段和局部变量
有条件的使用前缀
代码整洁
表驱动
static void Main(string[] args){
SampleClass sample = new SampleClass();
var addMethod = typeof(SampleClass).GetMethod(ActionInTable(WeekMonday));
addMethod.Invoke(sample, null);
}
static string ActionInTable(Week week){
string[] methods = {""Cleaning"", ""CleanCloset"", ""Quarrel"", ""Shopping""};
return methods[(int)week];
}
class SampleClass{
public void Cleaning(){Colsole.WriteLine(""打扫"");}
public void CleanCloset(){Console.WriteLine(""吵架"");}
}
使用时间访问器替代公开的事件成员变量
规范化开发
自动化测试(黑盒)
Code UI Automation

C#如何提高代码质量(二)的更多相关文章

  1. 提高代码质量 CheckStyle FindBugs PMD

    提高代码质量-工具篇 注:这是一篇翻译文章,原文:How to improve quality and syntax of your Android code,为了理解连贯,翻译过程中我修改了一些陈述 ...

  2. Findbug在项目中的运用--提高代码质量

     FindBugs是一个静态分析工具,它检查类或者 JAR文件,将字节码与一组缺陷模式进行对比以发现可能的问题.有了静态分析工具,就可以在不实际运行程序的情况对软件进行分析 第一 手动安装 在Ec ...

  3. Web前端开发最佳实践(11):使用更严格的JavaScript编码方式,提高代码质量

    前言 JavaScript语言由于其固有的灵活性,所以导致开发者可以写出很多诡异的代码,甚至一些较为正常的特性,如类型隐式转换.this的指代等等,也会让刚接触此语言的开发者头大不已.尤其是那些熟知其 ...

  4. (转)提高代码质量---one

    1. 摘要 这是烂代码系列的第二篇,在文章中我会跟大家讨论一下如何尽可能高效和客观的评价代码的优劣. 在发布了关于烂代码的那些事(上)之后,发现这篇文章竟然意外的很受欢迎,很多人也描(tu)述(cao ...

  5. SonarQube与Jenkins结合提高代码质量

    首先,为什么需要SonarQube? 1.WriteClean Code 1)全局健康报告  2)关注新增的问题  3)强制QualityGate 4)Issue详情及建议- 详情参考:https:/ ...

  6. 用 Eclipse 插件提高代码质量

    如果能在构建代码前发现代码中潜在的问题会怎么样呢?很有趣的是,Eclipse 插件中就有这样的工具,比如 JDepend 和 CheckStyle,它们能帮您在软件问题暴露前发现这些问题.在 让开发自 ...

  7. 提高代码质量系列之二:重构小技巧——if篇

    前言: if,相信是童鞋们使用的最频繁的关键字了,而且很多时候,我们使用的if都是在无意识的状态下随手而为.键入if,两下回车(我使用了resharper,可以自动编排if的格式),再信手写下我们需要 ...

  8. 测试驱动开发(Test-Driven Development,简称TDD)--单元测试-->提高代码质量

    !!! 1.估算和做项目计划时要算上单元测试时间 2.开发之前写单元测试代码 盖房子的时候,工人师傅砌墙,会先用桩子拉上线,以使砖能够垒的笔直,因为垒砖的时候都是以这根线为基准的.TDD就像这样,先写 ...

  9. linux 提高代码质量的工具

    很多IT公司对于软件开发都有严格的分工,这包括设计.测试.服务支持等等.但是,我一直都认为只有开发者才是真正对软件质量负责的人.没有好的软件设计,软件质量基本上是无从谈起.当然,要做到这一点是需要额外 ...

  10. 使用flow捕获js错误提高代码质量

    本文将介绍Flow及其主特性.下面分别从如何安装设置,如何添加类型注释,如何在运行时自动去掉注释等方面来介绍. 安装 目前Flow兼容的操作系统有Mac OS X,Linux(64位),Windows ...

随机推荐

  1. 初识vue3.0

    vue3.0 源码组织方式的变化 采用ts重写 独立的功能模块提取到单独的包中 90%的api兼容Vue2.x Composition API 组合api 解决vue2.x options api 开 ...

  2. 谣言检测()《Rumor Detection with Self-supervised Learning on Texts and Social Graph》

    论文信息 论文标题:Rumor Detection with Self-supervised Learning on Texts and Social Graph论文作者:Yuan Gao, Xian ...

  3. Django开发汇总

    基本配置 # 设置数据库为使用的mysql DATABASES = { 'default': { 'ENGINE': 'django.db.backends.mysql', 'NAME': 'libr ...

  4. SimpleDateFormat线程安全问题排查

    一. 问题现象 运营部门反馈使用小程序配置的拉新现金红包活动二维码,在扫码后跳转至404页面. 二. 原因排查 首先,检查扫码后的跳转链接地址不是对应二维码的实际URL,根据代码逻辑推测,可能是acc ...

  5. 2022-11-04 Acwing每日一题

    本系列所有题目均为Acwing课的内容,发表博客既是为了学习总结,加深自己的印象,同时也是为了以后回过头来看时,不会感叹虚度光阴罢了,因此如果出现错误,欢迎大家能够指出错误,我会认真改正的.同时也希望 ...

  6. GO语言内存操作指导—unsafe的使用

    在unsafe包里面,官方的说明是:A uintptr is an integer, not a reference.Converting a Pointer to a uintptr creates ...

  7. 【Java并发005】原理层面:volatile关键字全解析

    一.前言 在Java 5之前,volatile是一个备受争议的关键字,因为在程序中使用它往往会导致出人意料的结果.在Java 5之后,volatile关键字才得以重获生机. volatile关键字虽然 ...

  8. UBOOT编译--- UBOOT的顶层config.mk(五)

    1. 前言 UBOOT版本:uboot2018.03,开发板myimx8mmek240. 2. 概述 此文件包含在 ./Makefile 和 spl/Makefile 中. 清理状态以避免添加两次相同 ...

  9. Lakehouse架构指南

    你曾经是否有构建一个开源数据湖来存储数据以进行分析需求? 数据湖包括哪些组件和功能? 不了解 Lakehouse 和 数据仓库 之间的区别? 或者只是想管理数百到数千个文件并拥有更多类似数据库的功能但 ...

  10. 【kafka】JDBC source&sink connect实现数据从Oracle实时同步插入更新到PostgreSQL(PG)

    〇.所需资料 1.JDBC connect的plugins下载地址(confluent) 一.Oracle建表 1.表规划 表名:Test_TimeFormat_Order.Test_Stress_O ...