#避免

避免在ASP.NET Core中使用服务定位器模式

(此文章同时发表在本人微信公众号“dotNET每日精华文章”,欢迎右边二维码来关注。)题记:服务定位器(ServiceLocator)作为一种反模式,一般情况下应该避免使用,在ASP.NETCore更是需要如此。ScottAllen在其博客网站上发表了一篇名为“AvoidingtheServiceLocatorPatt...

【转】编写高质量代码改善C#程序的157个建议——建议73:避免锁定不恰当的同步对象

 建议73:避免锁定不恰当的同步对象在C#中,让线程同步的另一种编码方式就是使用线程锁。线程锁的原理,就是锁住一个资源,使得应用程序在此刻只有一个线程访问该资源。通俗地讲,就是让多线程变成单线程。在C#中,可以将被锁定的资源理解成new出来的普通CLR对象。既然需要锁定的资源就是C#中的一个对象,我们就该仔细...

【转】编写高质量代码改善C#程序的157个建议——建议70:避免在调用栈较低的位置记录异常

 建议70:避免在调用栈较低的位置记录异常并不是所有的异常都要被记录到日志,一类情况是异常发生的场景需要被记录,还有一类就是未被捕获的异常。未被捕获的异常通常被视为一个Bug,所以,对于它的记录,应该被视为系统的一个重要组成部分。最适合记录异常和报告的是应用程序的最上层,这通常是UI层。假设存在这样一个应用程...

【转】编写高质量代码改善C#程序的157个建议——建议69:应使用finally避免资源泄漏

 建议69:应使用finally避免资源泄漏除非发生让应用程序中断的异常,否则finally总是会先于return执行。finally的这个语言特性决定了资源释放的最佳位置就是在finally块中;另外,资源释放会随着调用堆栈由下往上执行。下面的代码验证了这一点,先定义一个需要释放的类:classClassS...

【转】编写高质量代码改善C#程序的157个建议——建议63:避免“吃掉”异常

 建议63:避免“吃掉”异常嵌套异常是很危险的行为,一不小心就就会将异常堆栈信息,也就是真正的Bug出处隐藏起来。这还不是最严重的,最严重的就是“吃掉”异常,即捕获,然后不向上层throw。避免“吃掉”异常,并不是说不应该“吃...

【转】编写高质量代码改善C#程序的157个建议——建议62:避免嵌套异常

 建议62:避免嵌套异常应该允许异常在调用堆栈上往上传,不要过多的使用catch,然后再throw。过多的使用catch会带来两个问题:1)代码更多了。这看上去好像你根本不知道怎么处理异常,所以你总是不停地catch。2)隐藏了堆栈信息,使你不知道真正发生异常的地方。无故地嵌套是我们应该极力避免的。当然。如果...

【转】编写高质量代码改善C#程序的157个建议——建议61:避免在finally内撰写无效代码

 建议61:避免在finally内撰写无效代码在阐述建议之前,需要先提出一个问题:是否存在一种打破try-finally执行顺序的情况,答案是:不存在(除非应用程序本身因为某些很少出现的特殊情况在try块中退出)。应该始终认为finally内的代码会在方法return之前执行,哪怕return在try块中。正...

【转】编写高质量代码改善C#程序的157个建议——建议33:避免在泛型类型中声明静态成员

 建议33:避免在泛型类型中声明静态成员在上一建议中,已经理解了应该将MyList<int>和MyList<string>视作两个完全不同的类型,所以,不应该将MyList<T>中的静态成员理解成MyList<int>和MyList<string>共...

【转】编写高质量代码改善C#程序的157个建议——建议31:在LINQ查询中避免不必要的迭代

 建议31:在LINQ查询中避免不必要的迭代无论是SQL查询还是LINQ查询,搜索到结果立刻返回总比搜索完所有的结果再将结果返回的效率要高。示例代码:classMyList:IEnumerable<Person>{//为了演示需要,模拟了一个元素集合List<Person>list=n...

【转】编写高质量代码改善C#程序的157个建议——建议23:避免将List<T>作为自定义集合类的基类

 建议23:避免将List<T>作为自定义集合类的基类如果要实现一个自定义的集合类,不应该以一个FCL集合类为基类,反而应扩展相应的泛型接口。FCL结合类应该以组合的形式包含至自定义的集合类,需要扩展的泛型接口通常是IEnumerable<T>和ICollection<T>...

【转】编写高质量代码改善C#程序的157个建议——建议8: 避免给枚举类型的元素提供显式的值

 建议8:避免给枚举类型的元素提供显式的值一般情况下,没有必要给枚举类型的元素提供显式的值。创建枚举的理由之一,就是为了代替使用实际的数值。不正确地为枚举类型的元素设定显式的值,会带来意想不到的错误。如果为建议7中的枚举类型Week增加一个元素,代码如下所示:enumWeek{Monday=1,Tuesday...

【转】编写高质量代码改善C#程序的157个建议——建议149:使用表驱动法避免过长的if和switch分支

 建议149:使用表驱动法避免过长的if和switch分支随着代码变得复杂,我们很容易被过长的if和switch分支困扰。一个类枚举类型Week如下:enumWeek{Monday,Tuesday,Wednesday,Thursday,Friday,Saturday,Sunday} 如果要把Week...

【转】编写高质量代码改善C#程序的157个建议——建议145:避免过长的方法和过长的类

 建议145:避免过长的方法和过长的类 如果违反“一个方法只做一件事”及类型的“单一职责原则”,往往会产生过长的方法和过长的类。如果方法过长,意味着可以站在更高的层次上重构出若干更小的方法。以行数作为指标,有人建议一个方法不要超过10行,有人建议不要超...

【转】编写高质量代码改善C#程序的157个建议——建议125:避免用FCL的类型名称命名自己的类型

 建议125:避免用FCL的类型名称命名自己的类型试想过自己写一个Socket类型吗?如果没有,我们来尝试一下:publicclassSocket{//省略}把以上代码同某些其他工具类封装到某个dll里,让其他人调用。调用者代码如下:publicclassSampleInvoker{publicvoidDoS...

【转】编写高质量代码改善C#程序的157个建议——建议116:避免用非对称算法加密文件

 建议116:避免用非对称算法加密文件MD5值或者说HASH值是一种不可逆的算法。如果需要从密文还原成明文,那么就需要对称和非对称这两类可逆算法了。对称算法示意图:在对称算法中,首先需要发送方和接收方协定一个密钥K。K可以是一个密钥对,但必须是加密密钥和解密密钥之间能相互推算出来的。在最简单也是最常用的对称算...
首页上一页...23456下一页尾页