典型重构3 (Try/Catch)
2024-09-02 13:50:04
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);
}
}
最新文章
- [C++11][数据结构]自己的双链表实现
- PHP正则表达式 /i, /is, /s, /isU等
- UNITY 2D入门基础教程
- 单片机C语言探究--为什么变量最好要赋初值
- AC自动机题目汇总
- 利用opencv3中的kmeans实现抠图功能
- JAVA命令大全
- [转]sql语句中出现笛卡尔乘积 SQL查询入门篇
- PhoneGap 安装体验
- Connection 和Dispose的学习日志
- 修改IE8搜索框为指定搜索引擎,如CSDN、百度知道等
- android:TextAppearance.Material.Widget.Button.Inverse问题
- 自己定义flash的宽和高
- 开始MVC5之旅
- 2929: [Poi1999]洞穴攀行
- JMeter接口测试系列-关联参数
- 解决@ResponseBody注解返回的json中文乱码问题
- C#中转换函数Convert、Parse、TryParse、(int) 的区别
- 51Nod1362 搬箱子 排列组合,中国剩余定理
- 使用Mongoose类库实现简单的增删改查