<读书笔记>(模块层面)BMS-6: 对架构构件进行解耦

"世上有两种软件设计: 一种是让设计更加简单, 以致于明显不会有缺陷. 另外一种是让设计变得十分复杂, 以致于看起来不会有明显的缺陷." -- C.A.R.Hoare

原则: 对顶层构件实现松耦合.

做法: 减少一个模块暴露给其他组件中的模块的相对代码量.

好处: 让组件更加容易进行独立维护.

这里的模块指的是一个类, 而组件是由模块组成的, 即组件包含若干模块.

软件架构在软件开发过程中的地位非常重要.

如何在实际工作中应用这个原则:

  • 限制作为组件接口的模块的大小.
  • 将组件的接口进行更高层级的抽象.
  • 避免组件中作为接口的模块在被调用的同时还调用其他组件中的接口.

利用抽象工厂模式来暴露尽可能少的接口代码

在实践中最多用到的就是利用抽象工厂来暴露接口, 这样组件间的依赖更多就依赖到了抽象上而非实现上.

另外还有许多的办法可以对组件间进行解耦, 比如利用依赖注入等手段.

抽象工厂是将特殊"产品"的制造隐藏在"产品工厂"接口的后方.

比如我们有一个 PlatformServices 组件, 它可以提供两种平台支持, 一种是 AWS, 一种是 Azure(而后期还会添加更多的平台类型支持).

现在这个组件的接口如下:

  • 启动服务
  • 停止服务
  • 获取指定容量的数据存储空间

基于这个接口, 我们创建两个特殊的工厂类, 分别对应 AWS 和 Azure. 而特殊的工厂类在实现的时候就必然会调用到 AWS 或 Azure 平台支持的实现代码, 但返回的都是相同的接口类型对象. 而不是特殊的 AWS 或 Azure 对象类型(这样就将它们隐藏在了组件中).

即一个产品对应一个特殊的产品工厂. 由工厂提供抽象产品, 产品的接口是统一的, 只是行为不同而已.

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 136,092评论 19 139
  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 176,235评论 25 709
  • 前言: 本文转自前同事casa的博文,这篇文章是基于runtime实现的iOS组件化方案,其实iOS组件化方案基本...
    monkey01阅读 5,594评论 1 2
  • iOS应用架构谈 组件化方案 讨论论坛 源 简述 前几天的一个晚上在infoQ的微信群里,来自蘑菇街的Limboy...
    其实也没有阅读 5,323评论 1 9
  • 論怪誕 所謂怪誕者,奇怪荒誕也!大千世界,無奇不有,能謂之奇怪者,委實不能盡解。而能謂之怪誕者,逃不脫人生的悲喜和...
    小年與柒阅读 1,288评论 0 0

友情链接更多精彩内容