Understanding the four rules of simple design
October 05, 2014
这是讲软件设计的一本相对较短的一本小书。 购买地址: https://leanpub.com/4rulesofsimpledesign
4个原则是:
- Tests pass
- Expresses intent
- DRY
- Small
测试是基础;命名要表达明晰贴切;拒绝重复;保持代码短小。解释了4个原则之后,使用实现生命游戏为例来说明这些原则。
另外一些吸引我的点:
快速判断是否有 Duplication 的方法
一段代码的实现,考虑如果发生变化的话,其他地方是否也需要修改,需要修改的地方可能就是有重复代码的地方。因为没有很好地隐藏实现。
Tell, Don’t Ask
其中提到了 “Tell, Don’t Ask” 原则。
去命令对象做什么,而不要依赖一个对象的状态去决定下一步做什么。将这个判断隐藏到对象的实现中。否则就是“leaky abstraction”。
Bad:
def street_name(user):
if user.address:
return user.address().street_name()
else:
return ‘no street name’
Good:
def street_name(user):
return user.address().street_name()
class Address(object):
def street_name(self):
return self._street_name or 'no street name'
class User(object):
def address(self):
return self._address or Address()
遵循这个原则的好处明显,减少逻辑,代码更简单,对象的实现更凝聚。
Unwrapping 方法
Bad:
class Num(object):
val = None
def greater_than(self, other_num):
return True if self.val > other_num.val else False
Good:
class Num(object):
val = None
def greater_than(self, other_num):
num1, num2 = self, other_num
return self.compare(num1, num2)
@classmethod
def compare(cls, num1, num2):
return True if num1 > num2 else False
第二种实现的好处是:在做 greater_than 时,不必再去接触Num对象的内部。