大道至简的架构设计思想之:封装(C系架构设计法,sishuok)
一起来看看大道至简的一些基本设计思想,首先我们来看一下什么是封装。
封装:也叫做信息隐藏,或者数据访问保护。放到程序上来讲,就是隐藏类的属性,还有实现细节,仅对外公开一些接口。那么外部,就只能通过这个类暴露的这些访问接口,按照这个类提供的方式来访问类的内部信息或者数据。这样子的一种情况就叫做封装。
作为做Java的我们来讲,封装,我们是非常非常熟悉的,因为一开始学Java,学面向对象,就会讲封装、继承和多态。
接下来,我们就来谈一谈,到底面向对象当中封装的本质是什么。其实从字面意义上理解封装,就是把什么东西包装起来,进一步说就是一个封装体。事实上大家想,面向对象当中,类是不是就是一个封装体?
大家想想,类里面封装的什么呢?无外乎就是一些属性,就是一些数据,然后是方法,其实可以代表它的功能。
也就说一个类,它就是封装了一定功能的这么一个封装体。
当然,封装并不仅仅只是对一个类而言,你可以扩大一点,以此类推,从设计的角度来看:一个组件是不是一个封装?只不过它封装的,不再是属性、方法,它里头封装的就是一个一个的,其它组件或者模块,或者是类。
以此类推,组件是一个封装体,那模块是不是一个封装体? 子系统是不是一个封装体?系统是不是还是一个封装体?
只是范围大小不同而已,所以大家会发现,封装是咱们做架构设计一个非常非常基础的、非常重要的思想。
咱们再从另外一个角度来看一看,类,它其实是代码功能的一个封装,或者说是一个聚合方式。
没有面向对象之前,咱们叫做面向过程设计,或者叫过程化设计。大家可以理解成是这样,这里面有一堆的代码,我们称之为函数,或者说是一些过程。
在过程化设计里面,这些功能都是比较散乱的堆放在一起,也就说每一个功能只管自己,跟其它功能没有什么联系。但后来大家觉得,这样子去摆放代码非常的不友好。要想找一个功能,尤其是带流程的,那就在里头跳来跳去,非常的乱。
大家就想到一个办法:把相关的一些功能,比方说发现这里的功能是相关的,都是用来做,比方说用户数据的管理。我们就可以把这个东西封装起来,然后就演化成,可以用一个类来封装这些东西,就开始面向对象设计了。
这些功能都是相关的,都是用户这个对象应该要实现的功能,也就说从代码的角度,也能够感觉得到,面向对象设计实际上就是把原来这些过程化设计当中,杂乱无章的这些函数或者是功能,按照一定的方式重新进行组织,把它们封装到一起。所以说呢,从某种意上说,类是代码的一种聚合方式。
咱们一个完整的软件系统,就是由大大小小的,各种不同的这种封装体聚合起来的。就好比说一个大的软件系统,又分成了很多的子系统,这个子系统其实也是一种封装。
这个子系统又包含另外的子系统,每个子系统里面可能有很多的模块或者是组件,这些组件里面又有很多具体的功能,也就是它封装的是一定的功能。 这不就是大大小小的封装,最终合起来就是你的这个系统。
所以说大家要从架构设计的眼光来看待这些问题。你看一个大的软件系统不就是大大小小的各种各样的封装体吗?至于这里头到底封装的是什么。这个东西就看你怎么划分了,直到最后落实到具体的功能上。
从设计上来讲,到底封装什么呢?对于每一个封装体来说,主要就是为了把核心业务部分,或者是核心功能部分封装起来。那么这么封装起来有什么样的好处呢?也就是为什么要封装呢?
大家想想,当你把这些核心功能封装起来过后,首先对核心功能是一个安全保护。另外呢,也是为了复用这些核心的功能,除了这些呢,把这包装起来的目的,是为了可修改,可维护,可扩展。
有些人说,怎么还会可修改可维护呢?很简单,你把这些功能封装在这个,比方说椭圆里面封装了一堆的功能,事实上,这内部的功能和外部是不是就分开了?你封装的这些功能是不是就可以单独的进行修改,进行维护,并且进行扩展。
只要对外提供的接口不发生变化,那你封装起来的这一块,是不是就可以随便改了。所以说呢,从某种意义上来说,也是封装了变化。
当你觉得这一块以后可能会变,就可以把这块先包装起来,那么以后的变化,就可以在封装体内来实现,而不会影响到外部。当然这个了,跟咱们接下去要讲的一个思想:隔离,是息息相关的,或者是有类似之处的。总之呢,大家会发现封装对我们来讲,是一个非常非常重要的思想,我们一定要重视对他的理解。
为了大家更好的交流架构设计的思想和知识,大家可以加sishuok,拉你进架构设计群,一起共同学习,共同进步。
相关文章
- 高考估分太头疼?大数据算法或成预测成绩新方式
- 告警:IO利用率飚至60%+,请及时排查优化!
- 八大 Linux/Unix 服务器内存转储工具
- 当红架构Cloud Native,怎么搭建才能成为上云助攻手?
- 原生的 exFAT 支持已经来到 Linux 平台
- 从源码探究MySQL5.7高吞吐事务量的背后操手
- 新电脑+旧系统:教你在不同机器间转移Linux
- 网易云基于Kubernetes+Docker的容器服务研发实践
- 金融圈食物链大揭秘,五分钟变身金融圈内人!
- 我安身立命的编程指导
- myeclipse的server视图经常报nullpoint
- Ubuntu 的软件的管理工具
- 女孩子学Linux之硬盘分区篇
- 云服务器ECS下的FTP服务的安装配置与使用
- 关于未来十年企业架构的十个关键词
- 如何设计一个牛掰的大型项目架构?
- Linux系统管理员不可不知的命令:sudo
- Kubernetes是Docker的终结者?我不认同!
- 在Ubuntu/Debian上用Unison来同步文件
- Linux 知识深似海