.NET中的设计模式——利用空模式构造安全代码
2010-09-04 16:24
281 查看
题记:
《.NET中的设计模式》系列随笔停下有一段时间了,一则总结个东西不容易,另一则,不想写相同的内容(如果朋友们没有在我的随笔中看到新东西,我认为是浪费大家的时间,也是一种失败)。
今天开题之前先让大家见一个老朋友,相信没有一个人会不认识它:-)
大家是不是觉得很眼熟啊。程序中产生一个错误的原因很简单,解决方法也很简单,我也相信写过两年代码的人只要稍微细心一点就很少遇到这个问题。抛去原因,相信很多人是这么解决此类问题的:
if(obj!=null){}
然而一个项目中,各种类似变量成千上万,如果每个地方都这么判断,不仅浪费体力,而且让代码丑陋,甚至因为遗漏而出现低级Bug。相信这都不是大家愿意看到的。那么有没有好的解决办法呢?答案就是空模式!
空模式不属于《GoF23种设计模式》,最早接触它,是在一本Java中的设计模式书中,用Java的人应该都知道(如果用Java几年还不知道就无语了...)。然而既然是设计模式,.NET中一样可以用(工具无优劣,挫人论高低)。
空模式,其目的是为了保证代码的安全和优雅,避免丑陋的代码。
还回到已开始的错误场景,其实我们最希望的解决方式不是解决Bug,而是Bug不存在,那么空模式怎么解决此类问题呢?先看下面的示例代码:
通过比较上面的两段代码,一般情况下四行的业务代码,为了容错,至少要写6行的容错代码,而使用空模式时,不用增加任何一行容错代码。是不是发现用了空模式后代码更加优雅简单,并且安全性提高了很多.
小结:空模式是一种很简单的模式,甚至不算是模式。然而它代表了一种很好的编码习惯,在具体项目开发过程中,如果用好类似的习惯,相信开发效率会更高,个人技能也会更高。
《.NET中的设计模式》系列随笔停下有一段时间了,一则总结个东西不容易,另一则,不想写相同的内容(如果朋友们没有在我的随笔中看到新东西,我认为是浪费大家的时间,也是一种失败)。
今天开题之前先让大家见一个老朋友,相信没有一个人会不认识它:-)
大家是不是觉得很眼熟啊。程序中产生一个错误的原因很简单,解决方法也很简单,我也相信写过两年代码的人只要稍微细心一点就很少遇到这个问题。抛去原因,相信很多人是这么解决此类问题的:
if(obj!=null){}
然而一个项目中,各种类似变量成千上万,如果每个地方都这么判断,不仅浪费体力,而且让代码丑陋,甚至因为遗漏而出现低级Bug。相信这都不是大家愿意看到的。那么有没有好的解决办法呢?答案就是空模式!
空模式不属于《GoF23种设计模式》,最早接触它,是在一本Java中的设计模式书中,用Java的人应该都知道(如果用Java几年还不知道就无语了...)。然而既然是设计模式,.NET中一样可以用(工具无优劣,挫人论高低)。
空模式,其目的是为了保证代码的安全和优雅,避免丑陋的代码。
还回到已开始的错误场景,其实我们最希望的解决方式不是解决Bug,而是Bug不存在,那么空模式怎么解决此类问题呢?先看下面的示例代码:
通常我们的代码会这么写static void TestNormal() { Console.WriteLine("测试传统方法."); BusinessBase bb = GetBusinessNormal(true); if(bb!=null) bb.DoSomething(); else Console.WriteLine("出错啦."); bb = GetBusinessNormal(false); if (bb != null) bb.DoSomething(); else Console.WriteLine("出错啦."); } static BusinessBase GetBusinessNormal(bool flag) { try { if (flag) return new BusinessA(); throw new Exception("出错啦."); } catch { return null; } }
使用空模式时,代码如下:
static void TestEmptyPattern() {
Console.WriteLine("测试空模式.");
BusinessBase bb = GetBusinessEmptyPattern(false);
bb.DoSomething();
bb = GetBusinessEmptyPattern(true);
bb.DoSomething();
}
static BusinessBase GetBusinessEmptyPattern(bool flag) {
try {
if(flag)
return new BusinessA();
throw new Exception("出错啦.");
}
catch {
return BusinessA.Empty;
}
}
通过比较上面的两段代码,一般情况下四行的业务代码,为了容错,至少要写6行的容错代码,而使用空模式时,不用增加任何一行容错代码。是不是发现用了空模式后代码更加优雅简单,并且安全性提高了很多.
小结:空模式是一种很简单的模式,甚至不算是模式。然而它代表了一种很好的编码习惯,在具体项目开发过程中,如果用好类似的习惯,相信开发效率会更高,个人技能也会更高。
相关文章推荐
- .NET Romoting 学习总结(三)—— Remoting技术之设计模式实现代码安全
- 解析大型.NET ERP系统 高质量.NET代码设计模式
- 设计模式-缓存工厂模式代码构造
- 设计模式简单代码之Composite模式(老师分配任务篇)
- .NET设计模式(3):抽象工厂模式(Abstract Factory)
- .net中的设计模式---单例模式,涉及lock的用法
- 重温C#设计模式-安全的Singleton模式
- .NET设计模式(24):访问者模式(Visitor Pattern)
- Delphi 设计模式:《HeadFirst设计模式》Delphi7代码---命令模式之SimpleRemoteControlTest
- .NET设计模式(9):桥接模式(Bridge Pattern)
- [翻译-ASP.NET MVC]Contact Manager开发之旅迭代4 - 利用设计模式松散耦合
- 如何使用设计模式来构造系统--(6)
- 责任链设计模式代码
- Asp.Net Forums 代码中的web设计模式
- 如何优化代码节约系统资源解决重复实例化对象的问题——神奇的单例模式(C#设计模式)
- .Net网络通讯编程[利用Socket实现字串、文件、序列化对象传输]--类设计1
- .Net网络通讯编程[利用Socket实现字串、文件、序列化对象传输]--类设计2[使用IE浏览本页]
- 详解Java设计模式中的生产-消费者模式及代码实现
- 100行代码让您学会JavaScript原生的Proxy设计模式
- .NET设计模式系列文章