随便谈谈粒度、抽象与复用

看到一个很有意思的粒度的定义:granularity = grain + clarity,粒度 = 颗粒 + 清晰。也就是说,粒度越大,代码的“颗粒”越模糊,越接近一个逻辑上的概念;粒度越小,代码的“颗粒”越清晰,越接近具体的实现。

我通常认为“颗粒”是一个组件,不过在这里还是用单元这个概念来称呼吧,避免无谓的名词上的争论。事实上,“颗粒”这个概念暗示了它的自治性,每一个单元都应当是独立于其他部分的。同时,“清晰”这个概念暗示的是它的抽象层级,粒度越粗的单元的抽象程度越高。

粗粒度的单元往往代表着很高的抽象层级,从直觉上来说,似乎更倾向于有更高的复用性,但是不然,通常情况下粗粒度的单元的复用性要更差。因为高度的抽象带来的是细节上的缺失,为了能够正确地使用一个高度抽象的单元,使用者需要自行补充大量的细节,同时导致单元的提供者需要考虑各种各样的使用情况,反而导致了复用性的丧失。完全抽象的单元是无法使用的,就像那个四关系表一样。细粒度的、更具体的单元反而更容易复用。

从直觉上来说,抽象肯定是为了复用的,毕竟不抽象的东西在复用时存在困难。但是,两个本质问题是分解和抽象,目标是降低复杂度,并没有任何一个和复用有直接的关系。抽象之所以和复用联系在一起,只不过从大多数时候来说,复用能够倒逼思考抽象以降低复杂度。直接复制粘贴,或者说snippet,就不是复用了吗?这和抽象的关系就不太紧密了。

是修改多次以获得独立演化的能力,还是只修改一次而让几个单元耦合在一起,是一个权衡的地方。只有真正完全独立的东西,才能以抽象的形式进行复用。

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值