换个角度理解之银弹

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

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

1. 来源

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

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

2. 解读

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

2.1 推迟作决定的时机

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

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

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

2.2 知道自己不该知道什么

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

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

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

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

3. 总结

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

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

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 173,142评论 25 708
  • 干货分享:用运营思维树立个人品牌 第一弹 不用800万的学区房,不用环游世界的毒鸡汤,每个人都可以成为人生赢家。大...
    张老师Jess阅读 546评论 15 7
  • 一根鱼线掏空我心一颗颗将我穿引最后打一个结锁住我心 原以为哪一个人爱不释手便是我的主人才明了我不过一串佛物敬仰之又...
    静止空间阅读 149评论 0 2
  • 坐在回家的637路公交车上,我开始感到疲倦。 今天不是周末,不是周一,只是在这之间的,某个普通的日子。 早上离开家...
    陆不换阅读 951评论 1 2
  • 今天下午,浏览了几所同类高校的科研网,颇有收获。我们在对外宣传这部分,做得不够。 一、网页要分类清晰,亮点突出有的...
    容玲阅读 175评论 0 1