开场
今天, 我们将从一个小功能开始, 先去不假思索的实现它
- Product Repository: Filtering Operation
Code start
有一个产品库, 我们要对它做过滤操作.
第一个需求并不复杂.
- 需求1:在仓库中查找所有颜色为红色的产品
First Attempt: Hard Code
我们先用最简单的方式去实现它, 硬编码
1 2 3 4 5 6 7 8 9 10 |
- (NSArray *)findAllRedProducts:(NSArray *)products { NSMutableArray *list = [@[] mutableCopy]; for (Product *product in products) { if (product.color == RED) { [list addObject:product]; } } return list; } |
如果这个世界是永恒静止的,这样的实现无可厚非,但世界往往并非如此。
紧接着,第二个需求来了
- 需求2:在仓库中查找所有颜色为绿色的产品
Second Attempt: Parameterizing
Copy-Paste是大部分程序员最容易犯的毛病,为此引入了大量的重复代码。
1 2 3 4 5 6 7 8 9 10 |
- (NSArray *)findAllGreenProducts:(NSArray *)products { NSMutableArray *list = [@[] mutableCopy]; for (Product *product in products) { if (product.color == GREEN) { [list addObject:product]; } } return list; } |
为了消灭硬编码,得到可重用的代码,可以引入简单的参数化设计。
1 2 3 4 5 6 7 8 9 10 |
- (NSArray *)findProducts:(NSArray *)products byColor:(ProductColor)color { NSMutableArray *list = [@[] mutableCopy]; for (Product *product in products) { if (product.color == color) { [list addObject:product]; } } return list; } |
终于可以放心了, 这个时候我们的产品经理怎么可能让你舒服呢,需求3又来了
- 需求3:查找所有重量小于10的所有产品
Third Attempt: Parameterizing with Every Attribute You Can Think Of
大部分程序员依然会使用Copy-Paste解决这个问题,拒绝Copy-Paste的陋习,最具实效的一个反馈就是让这个快捷键失效,从而在每次尝试Copy-Paste时提醒自己做更好的设计。
1 2 3 4 5 6 7 8 9 10 |
- (NSArray *)findProducts:(NSArray *)products byWeith:(float)weight { NSMutableArray *list = [@[] mutableCopy]; for (Product *product in products) { if (product.weight < weight) { [list addObject:product]; } } return list; } |
为了消除两者重复的代码,通过简单的参数化往往不能完美解决这类问题,相反地会引入过度的复杂度和偶发成本。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
- (NSArray *ayon-code"> - (NSArray *pan style="font-weight: normal">需求1:在仓库中查找所有颜色为红色的产品
First Attempt: Hard Code 我们先用最简单的方式去实现它, 硬编码
如果这个世界是永恒静止的,这样的实现无可厚非,但世界往往并非如此。 紧接着,第二个需求来了
Second Attempt: Parameterizing Copy-Paste是大部分程序员最容易犯的毛病,为此引入了大量的重复代码。
为了消灭硬编码,得到可重用的代码,可以引入简单的参数化设计。
终于可以放心了, 这个时候我们的产品经理怎么可能让你舒服呢,需求3又来了
Third Attempt: Parameterizing with Every Attribute You Can Think Of 大部分程序员依然会使用Copy-Paste解决这个问题,拒绝Copy-Paste的陋习,最具实效的一个反馈就是让这个快捷键失效,从而在每次尝试Copy-Paste时提醒自己做更好的设计。
为了消除两者重复的代码,通过简单的参数化往往不能完美解决这类问题,相反地会引入过度的复杂度和偶发成本。
|