我正好看到了下面的一段**:
public
void execute()
arraylist empids = payrolldatabase.getallemployeeids();
foreach (int empid in empids)
employee employee = payrolldatabase.getemployee(empid);
if (employee.ispaydate(paydate))
datetime startdate = employee.getpayperiodstartdate(paydate);
paycheck pc = new
paycheck(startdate, paydate);
paychecks[empid] = pc;
employee.payday(pc);
這段**有點老,是用.net 2.0之前版本寫的。可是,並不是裡面arraylist的用法讓我苦惱。首先他從資料庫裡取出所有員工的id。然後他遍歷這個id集合,從資料庫這取出每個員工的資訊。每當我看到這樣的**,我都想踹寫這個程式的人一腳。
如果你還不明白這樣的寫法有什麼問題,請這樣想想:你第一次把select語句傳送給資料庫查詢員工id,查詢出5條員工記錄。然後你需要向資料庫請求另外5條查詢語句,分別查出這幾個員工的資訊。這還好,6次查詢並不是乙個多大的事情,不是嗎?可是你為什麼不能把所有需要的資料一次性的全部查詢出來呢(這樣只有一次開銷大的查詢)!想象一下,如果你要計算的是100個員工的工資呢,而不是5個?如果是1000個員工的呢?
讓我不可理解的是,這樣的**天天都會產生。難道這些人真的不在乎、或真的不知道這樣的**有多糟嗎?如果他們真的不知道,那真是很悲哀。如果他們不在意,那更糟糕,因為如果乙個程式設計師明知這樣寫有問題還是要這樣寫,很顯然,他不認為他的工作有價值,他不關心他的程式,他的團隊,他的公司,以及他的客戶。
如果你奇怪我是從**找到這段**的…是在robert c(敏捷軟體開發理論的創始人)那裡。他的《敏捷軟體開發:原則、模式與實踐(c#版)》這邊書裡。是的,是 robert c。martin,也就是uncle bob。我也許不該批評物件導向領域裡如此著名的人物,可是,說真的,bob,你腦袋進水了嗎?你的整本書的目的都是在教育人如何寫出優質的**,裡面可以找到大量很有價值的教導。但把這樣的**當作例子實在是不可寬恕。
[英文原文:why on earth would a developer do this? ]
乙個合格的程式設計師該做的事情
乙個合格的程式設計師該做的事情來自 csdn 選擇自 mailbomb 的 blog 程式設計師每天該做的事 1 總結自己一天任務的完成情況 最好的方式是寫工作日誌,把自己今天完成了什麼事情,遇見了什麼問題都記錄下來,日後翻看好處多多 2 考慮自己明天應該做的主要工作 把明天要做的事情列出來,並按照...
乙個合格的程式設計師該做的事情
程式設計師每天該做的事1 總結自己一天任務的完成情況 最好的方式是寫工作日誌,把自己今天完成了什麼事情,遇見了什麼問題都記錄下來,日後翻看好處多多 2 考慮自己明天應該做的主要工作 把明天要做的事情列出來,並按照優先順序排列,第二天應該把自己效率最高的時間分配給最重要的工作 3 考慮自己一天工作中失...
乙個合格的程式設計師該做的事情
來自 csdn 選自mailbomb 的blog 程式設計師每天該做的事 1 總結自己一天任務的完成情況 最好的方式是寫工作日誌,把自己今天完成了什麼事情,遇見了什麼問題都記錄下來,日後翻看好處多多 2 考慮自己明天應該做的主要工作 把明天要做的事情列出來,並按照優先順序排列,第二天應該把自己效率最...