[观点]程序员优化代码的重要性

我正好看到了下面的一段代码:

 
 
  1. public void Execute()  
  2.  
  3.         {  
  4.  
  5.             ArrayList empIds = PayrollDatabase.GetAllEmployeeIds();  
  6.  
  7.             foreach (int empId in empIds)  
  8.  
  9.             {  
  10.  
  11.                 Employee employee = PayrollDatabase.GetEmployee(empId);  
  12.  
  13.                 if (employee.IsPayDate(payDate))  
  14.  
  15.                 {  
  16.  
  17.                     DateTime startDate = employee.GetPayPeriodStartDate(payDate);  
  18.  
  19.                     Paycheck pc = new Paycheck(startDate, payDate);  
  20.  
  21.                     paychecks[empId] = pc;  
  22.  
  23.                     employee.Payday(pc);  
  24.  
  25.                 }  
  26.  
  27.             }  
  28.  
  29.         } 

这段代码有点老,是用.NET 2.0之前版本写的。可是,并不是里面ArrayList的用法让我苦恼。首先他从数据库里取出所有员工的Id。然后他遍历这个Id集合,从数据库这取出每个员工的信息。每当我看到这样的代码,我都想踹写这个程序的人一脚。

如果你还不明白这样的写法有什么问题,请这样想想:你第一次把select语句发送给数据库查询员工Id,查询出5条员工记录。然后你需要向数据库请求另外5条查询语句,分别查出这几个员工的信息。这还好,6次查询并不是一个多大的事情,不是吗?可是你为什么不能把所有需要的数据一次性的全部查询出来呢(这样只有一次开销大的查询)!想象一下,如果你要计算的是100个员工的工资呢,而不是5个?如果是1000个员工的呢?

让我不可理解的是,这样的代码天天都会产生。难道这些人真的不在乎、或真的不知道这样的代码有多糟吗?如果他们真的不知道,那真是很悲哀。如果他们不在意,那更糟糕,因为如果一个程序员明知这样写有问题还是要这样写,很显然,他不认为他的工作有价值,他不关心他的程序,他的团队,他的公司,以及他的客户。

如果你奇怪我是从哪里找到这段代码的…是在Robert C(敏捷软件开发理论的创始人)那里。他的《敏捷软件开发:原则、模式与实践(C#版)》这边书里。是的,是 Robert C。Martin,也就是Uncle Bob。我也许不该批评面向对象领域里如此著名的人物,可是,说真的,Bob,你脑袋进水了吗?你的整本书的目的都是在教育人如何写出优质的代码,里面可以找到大量很有价值的教导。但把这样的代码当作例子实在是不可宽恕。

原文出自:davybrion.com

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值