前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >《架构整洁之道》第 19 章 策略与层次

《架构整洁之道》第 19 章 策略与层次

原创
作者头像
巴啦啦的积累
发布2023-06-05 08:29:27
1830
发布2023-06-05 08:29:27
举报
文章被收录于专栏:巴啦啦的积累

本质上所有软件系统就是一组策略语句的集合。每一段代码都是策略。软件架构设计的重点工作之一就是,将这些策略彼此分离,然后按照变更要求进行分组。其中变更原因,频率层次相同的策略应该被分到一个组件中。反之,就不该放到一个组件中。

层次(Level)

我们对层次,是严格按照输入与输出之间的距离,来定义的。也就是说,一条策略的距离系统的输入/输出越远,那么它的层次就越高。直接负责输入输出的,是最低。

举例:

输入一串字符,通过查表法转换这些字符,然后输出。数据流向实线,依赖关系虚线。

上图中,Translate就应该是层次最高的组件,因为离输入输出最远。可以看到,数据流向,和依赖关系的方向并不一致。因为我们希望流向和依赖脱钩,但要在组件层次上挂钩。

如果我们将代码写成这样,就是一个错误的架构,因为高层次组件依赖了低层次组件。

代码语言:javascript
复制
function encrypt(){//高层次组件,Translate
  while(true){
    writeChart(translate(readChart()));//低层次组件writeChart,readChart。
  }
}

好的架构应该如下图:使用接口隔离解耦。ConsoleReaderConsoleWriter都是具体实现类,属于低层次组件。这两个具体实现类,都形成了对高层次组件的插件,高层次组件可以不知道具体实现类,而实现类依赖于高层次组件

本章小结

实际上这个案例,简单的体现了单一职责原则(SRP),开闭原则(OCP),共同闭包原则(CCP),依赖反转原则(DIP),稳定依赖原则(SDP),稳定抽象原则(SAP)。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 层次(Level)
  • 本章小结
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档