3

大道至简的架构设计思想之:封装(C系架构设计法,sishuok) - 云飞龙行2021

 1 year ago
source link: https://www.cnblogs.com/yflx/p/17171553.html
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.

大道至简的架构设计思想之:封装(C系架构设计法,sishuok)

一起来看看大道至简的一些基本设计思想,首先我们来看一下什么是封装。

封装:也叫做信息隐藏,或者数据访问保护。放到程序上来讲,就是隐藏类的属性,还有实现细节,仅对外公开一些接口。那么外部,就只能通过这个类暴露的这些访问接口,按照这个类提供的方式来访问类的内部信息或者数据。这样子的一种情况就叫做封装。

作为做Java的我们来讲,封装,我们是非常非常熟悉的,因为一开始学Java,学面向对象,就会讲封装、继承和多态。

接下来,我们就来谈一谈,到底面向对象当中封装的本质是什么。其实从字面意义上理解封装,就是把什么东西包装起来,进一步说就是一个封装体。事实上大家想,面向对象当中,类是不是就是一个封装体?

4335b32f44224c298098570d425f7c48~tplv-obj.image?traceid=202303021341135409DE778E898587B1FA&x-expires=2147483647&x-signature=iN%2FNCZ9YYwbduoMM1pMMccuwosE%3D

大家想想,类里面封装的什么呢?无外乎就是一些属性,就是一些数据,然后是方法,其实可以代表它的功能。

2b00ca5d30c4423dad0e0e9f73766272~tplv-obj.image?traceid=202303021341135409DE778E898587B1FA&x-expires=2147483647&x-signature=lTANzDcGNXnDk0vaRPuln%2FT1%2FaU%3D

也就说一个类,它就是封装了一定功能的这么一个封装体

当然,封装并不仅仅只是对一个类而言,你可以扩大一点,以此类推,从设计的角度来看:一个组件是不是一个封装?只不过它封装的,不再是属性、方法,它里头封装的就是一个一个的,其它组件或者模块,或者是类。

113c5a80c4974679b32f90a5d6e9901b~tplv-obj.image?traceid=202303021341135409DE778E898587B1FA&x-expires=2147483647&x-signature=aD2QrlLxfUqWhyTX3uZCJfLIG0k%3D

以此类推,组件是一个封装体,那模块是不是一个封装体? 子系统是不是一个封装体?系统是不是还是一个封装体?

只是范围大小不同而已,所以大家会发现,封装是咱们做架构设计一个非常非常基础的、非常重要的思想。

咱们再从另外一个角度来看一看,类,它其实是代码功能的一个封装,或者说是一个聚合方式。

没有面向对象之前,咱们叫做面向过程设计,或者叫过程化设计。大家可以理解成是这样,这里面有一堆的代码,我们称之为函数,或者说是一些过程。

b1d926cb1ec04bf6bdb2e0e26bb055bf~tplv-obj.image?traceid=202303021341135409DE778E898587B1FA&x-expires=2147483647&x-signature=M9ZwOwSIZdMmlI9kA6jZsL3PBbU%3D

在过程化设计里面,这些功能都是比较散乱的堆放在一起,也就说每一个功能只管自己,跟其它功能没有什么联系。但后来大家觉得,这样子去摆放代码非常的不友好。要想找一个功能,尤其是带流程的,那就在里头跳来跳去,非常的乱。

大家就想到一个办法:把相关的一些功能,比方说发现这里的功能是相关的,都是用来做,比方说用户数据的管理。我们就可以把这个东西封装起来,然后就演化成,可以用一个类来封装这些东西,就开始面向对象设计了。

这些功能都是相关的,都是用户这个对象应该要实现的功能,也就说从代码的角度,也能够感觉得到,面向对象设计实际上就是把原来这些过程化设计当中,杂乱无章的这些函数或者是功能,按照一定的方式重新进行组织,把它们封装到一起。所以说呢,从某种意上说,类是代码的一种聚合方式。

咱们一个完整的软件系统,就是由大大小小的,各种不同的这种封装体聚合起来的。就好比说一个大的软件系统,又分成了很多的子系统,这个子系统其实也是一种封装。

这个子系统又包含另外的子系统,每个子系统里面可能有很多的模块或者是组件,这些组件里面又有很多具体的功能,也就是它封装的是一定的功能。 这不就是大大小小的封装,最终合起来就是你的这个系统。

503d157590124b399465c8db54894a80~tplv-obj.image?traceid=202303021341135409DE778E898587B1FA&x-expires=2147483647&x-signature=0FBRlbGjJ4BiNw9zudYhNwqOFdQ%3D

所以说大家要从架构设计的眼光来看待这些问题。你看一个大的软件系统不就是大大小小的各种各样的封装体吗?至于这里头到底封装的是什么。这个东西就看你怎么划分了,直到最后落实到具体的功能上。

从设计上来讲,到底封装什么呢?对于每一个封装体来说,主要就是为了把核心业务部分,或者是核心功能部分封装起来。那么这么封装起来有什么样的好处呢?也就是为什么要封装呢?

大家想想,当你把这些核心功能封装起来过后,首先对核心功能是一个安全保护。另外呢,也是为了复用这些核心的功能,除了这些呢,把这包装起来的目的,是为了可修改,可维护,可扩展。

有些人说,怎么还会可修改可维护呢?很简单,你把这些功能封装在这个,比方说椭圆里面封装了一堆的功能,事实上,这内部的功能和外部是不是就分开了?你封装的这些功能是不是就可以单独的进行修改,进行维护,并且进行扩展。

只要对外提供的接口不发生变化,那你封装起来的这一块,是不是就可以随便改了。所以说呢,从某种意义上来说,也是封装了变化。

当你觉得这一块以后可能会变,就可以把这块先包装起来,那么以后的变化,就可以在封装体内来实现,而不会影响到外部。当然这个了,跟咱们接下去要讲的一个思想:隔离,是息息相关的,或者是有类似之处的。总之呢,大家会发现封装对我们来讲,是一个非常非常重要的思想,我们一定要重视对他的理解。

为了大家更好的交流架构设计的思想和知识,大家可以加sishuok,拉你进架构设计群,一起共同学习,共同进步。


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK