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

换个角度理解之银弹

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

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

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

    1. 来源

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

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

    2. 解读

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

    2.1 推迟作决定的时机

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

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

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

    2.2 知道自己不该知道什么

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

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

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

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

    3. 总结

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

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

    相关文章

      网友评论

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

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