Chi Zhang

Understanding the four rules of simple design

October 05, 2014

cover

这是讲软件设计的一本相对较短的一本小书。 购买地址: 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对象的内部。


Written by Chi Zhang who lives and works in Singapore. Follow me

rss
© 2020, Chi Zhang