典型重构3 (Try/Catch)
Try/Catch 块过多
public Customer GetCustomer(string customerId)
{
try
{
var command = new SqlCommand();
var reader = command.ExecuteReader();
var customer = new Customer();
while(reader)
{
customer.customerId=customerId;
customer.CustomerName=reader["CustomerName"].ToString();
customer.CustomerStatus=reader["CustomerStatus"].ToString();
customer.LoyaltyProgram=reader["CustomerLoyaltyProgram"].ToString();
}
return customer;
}
catch(Exception ex)
{
_logger.LogException(ex);
var customer=new Customer{CustomerStatus="nuknown"};
return customer;
}
将每个代码块中的这些方法析取到外部方法
private static Customer GetCustomerFromDataStore(string customerId)
{
var command = new SqlCommand();
var reader = command.ExecuteReader();
var customer = new Customer();
while(reader)
{
customer.customerId=customerId;
customer.CustomerName=reader["CustomerName"].ToString();
customer.CustomerStatus=reader["CustomerStatus"].ToString();
customer.LoyaltyProgram=reader["CustomerLoyaltyProgram"].ToString();
}
return customer;
}
private Customer HandleDataStoreExceptionWhenRetrievingCustomer(Exception ex)
{
_logger.LogException(ex);
var customer=new Customer{CustomerStatus="nuknown"};
return customer;
}
重构结果:
public Customer GetCustomer(string customerId)
{
try
{
return GetCustomerFromDataStore(customerId);
}
catch(Exception ex)
{
return HandleDataStoreExceptionWhenRetrievingCustomer(ex);
}
}
典型重构3 (Try/Catch)的更多相关文章
- Python积木之with
简而言之,with 语句是典型的程序块 “try catch finally”的一种模式抽取.python的作者在PEP343中写道 “ This PEP adds a new statement & ...
- Java 写 Log
. 一个最基本的例子 使用Logging框架写Log基本上就三个步骤 引入loggerg类和logger工厂类 声明logger 记录日志 下面看一个例子 //1. 引入slf4j接口的Logger和 ...
- 重构机房收费系统你要用的——异常处理和抛出异常(try catch finally)——(vb.net)
你能保证你的程序不会出问题吗? 不能 当你的程序执行到某个地方发生了你不想要的结果.你是否想让它一错再错? 不想 你是否想让你的程序占着茅坑不拉屎? 不想 你是否想知道你的程序出错的原因? 想 个问题 ...
- C#重构经典全面汇总
C#重构经典全面汇总 1. 封装集合 概念:本文所讲的封装集合就是把集合进行封装,仅仅提供调用端须要的接口. 正文:在非常多时候,我们都不希望把一些不必要的操作暴露给调用端,仅仅须要给它所须要的操作 ...
- 记一次.NET代码重构
好久没写代码了,终于好不容易接到了开发任务,一看时间还挺充足的,我就慢慢整吧,若是遇上赶进度,基本上直接是功能优先,完全不考虑设计.你可以认为我完全没有追求,当身后有鞭子使劲赶的时候,神马设计都是浮云 ...
- ASP.NET MVC5+EF6+EasyUI 后台管理系统(58)-DAL层重构
系列目录 前言:这是对本文系统一次重要的革新,很久就想要重构数据访问层了,数据访问层重复代码太多.主要集中增删该查每个模块都有,所以本次是为封装相同接口方法 如果你想了解怎么重构普通的接口DAL层请查 ...
- ASP.NET MVC5+EF6+EasyUI 后台管理系统(59)-BLL层重构
系列目录 前言: 这应该是本系统最后一次重构,将重构BLL层和Model层.来完全取代代码生成器生成的BLL层和DAL层.完全废掉了代码生成器的DAL,BLL,MODEL层. 全自动生成增,删,改 ...
- Rafy 领域实体框架设计 - 重构 ORM 中的 Sql 生成
前言 Rafy 领域实体框架作为一个使用领域驱动设计作为指导思想的开发框架,必然要处理领域实体到数据库表之间的映射,即包含了 ORM 的功能.由于在 09 年最初设计时,ORM 部分的设计并不是最重要 ...
- .NET重构(类型码的设计、重构方法)
阅读目录: 1.开篇介绍 2.不影响对象中的逻辑行为(枚举.常量.Entity子类来替代类型码) 3.影响对象中的逻辑行为(抽象出类型码,使用多态解决) 4.无法直接抽象出类型码(使用策略模式解决) ...
随机推荐
- 《shell脚本if..then..elif..then.if语句的总结》
第一种: #!/bin/bash service vsftpd start &> /dev/null if [ $? -eq 0 ] then echo "ftp is sta ...
- 《boot分区监控的小脚本》
#!/bin/bash TEST=`df | grep "boot" |awk '{print $5}' |cut -f1 -d"%"` if [ $TEST ...
- window store app 附件读取
public static async Task<bool> DisplayApplicationPicker(string folderName, string fileName) { ...
- js 如何获取文本框中光标索引位置
function getTxt1CursorPosition(){ var oTxt1 = document.getElementById("txt1"); var cursurP ...
- asp.net多图片上传实现程序代码
下面是一个完整的asp.net同时支持多图片上传一个实现,有需要的朋友可参考一下,本文章限制同时可上传8张图片,当然大可自己可修改更多或更少. 前台代码如下: 复制代码代码如下: <% @ Pa ...
- (转)可收缩、扩展的TextView
在一些应用中,比如腾讯的应用市场APP应用宝,关于某款应用的介绍文字,如果介绍文字过长,那么不是全部展现出来,而是显示三四行的开始部分(摘要),预知全部的内容,用户点击展开按钮即可查阅全部内容.这样的 ...
- js中的数组
上网查了一下,js中的数组包含的内容还真不少.先给出两个学习的链接: w3school链接:http://www.w3school.com.cn/js/js_obj_array.asp 博客园链接:h ...
- AIX 中 Paging Space 使用率过高的分析与解决
AIX操作系统中Paging Space是很重要的设备,当系统中Paging Space使用率过高.系统内存不足时,将影响系统的整体性能,甚至会造成系统的挂起.针对这种情况,通常可以靠增加Paging ...
- python之函数嵌套
python很多特性与JavaScript是相似甚至相同的: 1. 无类型 2. 函数亦对象 .... 自然: python也允许函数嵌套, 这与JavaScript中函数闭包的作用一样....
- ZOJ 3229 有上下界最大流
1: /** 2: ZOJ 3229 有上下界的最大流 3: 两次求最大流的过程,非二分 4: 有源汇上下界的最大流问题, 首先连接 sink -> src, [0,INF]. 5: 根据net ...