美文网首页
换个角度理解之银弹

换个角度理解之银弹

作者: 夫礼者 | 来源:发表于2017-12-31 23:38 被阅读23次

《换个角度理解之设计模式》的草稿已经放了一个多月了,始终感觉缺少点什么。最近因为工作需要在读Shiro,Thymeleaf源码,而在阅读过程中时不时地会回想起还在做.NET的时候看过的 《程序员的自我修养—链接、装载与库》一书的这样一句话——“软件开发领域的银弹——引入中间层”

说句题外话,这本书当初依然是听取了很多人的推荐。但买回来之后才发现是讲C艹的。得益于当时的工资低但工作轻松,所以还是抽空看了一些。

1. 来源

下面这张图是我刚刚专门从网上截取来的。

《程序员的自我修养—链接、装载与库》P8

2. 解读

我还是从两个核心概念出发尝试阐述下对这句话的理解。

2.1 推迟作决定的时机

对上面这句话的理解最直接的当然就是推迟作决定的时机。中间层的引入最明显的就是再次将必须做出决定的时机后延。时机的后延也就意味着我们为应对变动留出了更多的空间,系统也因此变得更加牢固。

但是请记住,这种方式并不是完美无瑕的。引入中间层的一大弊端就是增加了理解上的难度,这也是考验架构师的一个重要指标——哪些才是必要的中间层?

本人曾经总结过这样一句话: “真正做出决定的时间点和假装做出决定的时间点之间的间隔越大,系统将越灵活,越牢固。大部分系统不稳定性的重要原因之一正是作决定的时机太早,导致之后作决定时被之前作下的决定所束缚,进而处处受制”

2.2 知道自己不该知道什么

中间层引入之后,对于中间层之上的调用者而言,它就不应该去关心中间层之下的相关细节,它只需要遵守中间层的契约,来获取自己想要的结果。

看了上面这段语言,是否感觉这个中间层的解释很像接口。没错,接口就是中间层的一种形式

所以在你引入了中间层之后,

  1. 当你处在中间层之上时,一定要谨记自己该知道的,以及不该知道的。尤其是后者,你作出的假设越少,系统的灵活性越大。
  2. 而当你位于中间层之下时,而是谨记不要去关注中间层之外的其他问题。这也符合很多前辈所教育我们的“不要对软件的其它部分做出任何假设”。

3. 总结

虽然是做.NET的时候就看到了这个言论,但真正有所感悟的则是在转入Java,看了这么多的源码之后。

回头想想曾经看过的那些优秀源码,对于它们设计中的精密之处,彼此之间似乎越来越像了!

相关文章

  • 换个角度理解之银弹

    《换个角度理解之设计模式》的草稿已经放了一个多月了,始终感觉缺少点什么。最近因为工作需要在读Shiro,Thyme...

  • 换个角度理解

    很高兴最近认识了一个很有趣的老师,在我眼里,他简直就是一个挂着老师名头的大哲学家啊!我还是第一次,听到有人如此去理...

  • 换个角度理解之设计模式

    这里以经典的二十三种来进行讨论。 概述 其实这个主题在本系列创建之初就建好了,但自感对于设计模式的理解还处于小学生...

  • 换个角度理解锁

    隔了窗户纸 说到锁,各种书籍或者博客上嗖嗖嗖就能上来一堆关于锁的名词,比如读写锁、互斥锁、自旋锁,等等。然后介绍这...

  • 换个角度理解——总览

    思想来源于《SICP》,《Clean Code》,《程序员的修炼之道——小工到专家》等经典,结合本人初级的实践经验...

  • 换个角度理解梯度

    https://www.zhihu.com/question/36301367/answer/198887937

  • 换个角度理解 DFT

    学校里面教的 学校里面基本都是说是把时域变换到频域等等,然后给一个公式, 然后当时虽然尽力在理解,但是仔细想起来,...

  • 换个角度理解“现实”

    今年突如其来的疫情,这只黑天鹅,使全球经济又进去了下挫,美国股市两天熔断,让人们感到这世界是怎么了? 而封闭在家的...

  • 换个角度理解之AOP与IOC

    老生常谈的话题,所以我这里所说的内容当然不能是一些老掉牙,被人咀嚼了无数次的残渣。我争取从一个特别的角度给你留下别...

  • [慎独]

    同样的事情,换个角度,换个站位,换个立场,去看去听,总会有不同的体会跟理解,理解之后才是包容,包容之后才是支持。

网友评论

      本文标题:换个角度理解之银弹

      本文链接:https://www.haomeiwen.com/subject/ahnagxtx.html