读《A Philosophy of Software Design》——(8)
🤔☕️🤔☕️🤔
读《A Philosophy of Software Design》——(8)Pull Complexity Downwards
📖:作为模块开发者,竭尽全力让使用方更简单,即会给自己带来更多额外工作。也就是说,让模块的接口尽量简单,优先于让模块的实现更简单。
🤔:曾经一度把接口设计为所有的可能性都留给调用方,也把所有的可能错误都返回给调用方,总觉得这是各种可能的组合都开放出来,使得使用方有足够的灵活性,想要什么都可以自己实现。现在想来,这个想法没错,不过它更适合封装技术平台差异的层面,并不太适合提供给业务实现方。在封装差异的层面,核心关注点是让差异屏蔽掉,使得上层有足够的机会组合出新的特性。但是在业务实现方看来,他需要的是让机制有效组合,快速适配业务流程。有再多的组合可能性,都没有实际的效益。如果还要让业务流程里捕捉各种异常,现在想来的确是个灾难。此处所谓的把复杂度拉下来,就是针对业务实现方而言,不要把更多的复杂抛给他们去处理,而是要提供刚刚好让业务快速组合的接口,把其它的复杂度都放到实现层面,这是更有助于机制助推业务实现。
📖:把复杂拉下来的好处:功能实现得更内聚,实现复杂后使用就简单起来,接口也更简单易理解
🤔:现在看 SOCKET 编程,相比于该接口下面的协议栈实现,其接口已经是不能再简单的简单。虽然对于第一次学习和使用 SOCKET 的开发而言,这样的接口集合还是略显复杂。不过其复杂度更多来自“插座”模型的不熟悉,相比于真正的协议栈,尤其是 TCP 这样复杂状态机的传输协议协议栈实现,SOCKET 绝对是简洁而优雅的网络编程接口典范之作。正是这份简洁优雅的特性,使得它的实际年龄比我还大。
—— By 术子米德 @2022.03.26
版权声明: 本文为 InfoQ 作者【术子米德】的原创文章。
原文链接:【http://xie.infoq.cn/article/2c73d9d299786b9a18bdf8d0a】。文章转载请联系作者。
评论