大道至简的架构设计思想之:封装(C系架构设计法,sishuok)
一起来看看大道至简的一些基本设计思想,首先我们来看一下什么是封装。
封装:也叫做信息隐藏,或者数据访问保护。放到程序上来讲,就是隐藏类的属性,还有实现细节,仅对外公开一些接口。那么外部,就只能通过这个类暴露的这些访问接口,按照这个类提供的方式来访问类的内部信息或者数据。这样子的一种情况就叫做封装。
作为做Java的我们来讲,封装,我们是非常非常熟悉的,因为一开始学Java,学面向对象,就会讲封装、继承和多态。
接下来,我们就来谈一谈,到底面向对象当中封装的本质是什么。其实从字面意义上理解封装,就是把什么东西包装起来,进一步说就是一个封装体。事实上大家想,面向对象当中,类是不是就是一个封装体?
大家想想,类里面封装的什么呢?无外乎就是一些属性,就是一些数据,然后是方法,其实可以代表它的功能。
也就说一个类,它就是封装了一定功能的这么一个封装体。
当然,封装并不仅仅只是对一个类而言,你可以扩大一点,以此类推,从设计的角度来看:一个组件是不是一个封装?只不过它封装的,不再是属性、方法,它里头封装的就是一个一个的,其它组件或者模块,或者是类。
以此类推,组件是一个封装体,那模块是不是一个封装体? 子系统是不是一个封装体?系统是不是还是一个封装体?
只是范围大小不同而已,所以大家会发现,封装是咱们做架构设计一个非常非常基础的、非常重要的思想。
咱们再从另外一个角度来看一看,类,它其实是代码功能的一个封装,或者说是一个聚合方式。
没有面向对象之前,咱们叫做面向过程设计,或者叫过程化设计。大家可以理解成是这样,这里面有一堆的代码,我们称之为函数,或者说是一些过程。
在过程化设计里面,这些功能都是比较散乱的堆放在一起,也就说每一个功能只管自己,跟其它功能没有什么联系。但后来大家觉得,这样子去摆放代码非常的不友好。要想找一个功能,尤其是带流程的,那就在里头跳来跳去,非常的乱。
大家就想到一个办法:把相关的一些功能,比方说发现这里的功能是相关的,都是用来做,比方说用户数据的管理。我们就可以把这个东西封装起来,然后就演化成,可以用一个类来封装这些东西,就开始面向对象设计了。
这些功能都是相关的,都是用户这个对象应该要实现的功能,也就说从代码的角度,也能够感觉得到,面向对象设计实际上就是把原来这些过程化设计当中,杂乱无章的这些函数或者是功能,按照一定的方式重新进行组织,把它们封装到一起。所以说呢,从某种意上说,类是代码的一种聚合方式。
咱们一个完整的软件系统,就是由大大小小的,各种不同的这种封装体聚合起来的。就好比说一个大的软件系统,又分成了很多的子系统,这个子系统其实也是一种封装。
这个子系统又包含另外的子系统,每个子系统里面可能有很多的模块或者是组件,这些组件里面又有很多具体的功能,也就是它封装的是一定的功能。 这不就是大大小小的封装,最终合起来就是你的这个系统。
所以说大家要从架构设计的眼光来看待这些问题。你看一个大的软件系统不就是大大小小的各种各样的封装体吗?至于这里头到底封装的是什么。这个东西就看你怎么划分了,直到最后落实到具体的功能上。
从设计上来讲,到底封装什么呢?对于每一个封装体来说,主要就是为了把核心业务部分,或者是核心功能部分封装起来。那么这么封装起来有什么样的好处呢?也就是为什么要封装呢?
大家想想,当你把这些核心功能封装起来过后,首先对核心功能是一个安全保护。另外呢,也是为了复用这些核心的功能,除了这些呢,把这包装起来的目的,是为了可修改,可维护,可扩展。
有些人说,怎么还会可修改可维护呢?很简单,你把这些功能封装在这个,比方说椭圆里面封装了一堆的功能,事实上,这内部的功能和外部是不是就分开了?你封装的这些功能是不是就可以单独的进行修改,进行维护,并且进行扩展。
只要对外提供的接口不发生变化,那你封装起来的这一块,是不是就可以随便改了。所以说呢,从某种意义上来说,也是封装了变化。
当你觉得这一块以后可能会变,就可以把这块先包装起来,那么以后的变化,就可以在封装体内来实现,而不会影响到外部。当然这个了,跟咱们接下去要讲的一个思想:隔离,是息息相关的,或者是有类似之处的。总之呢,大家会发现封装对我们来讲,是一个非常非常重要的思想,我们一定要重视对他的理解。
为了大家更好的交流架构设计的思想和知识,大家可以加sishuok,拉你进架构设计群,一起共同学习,共同进步。
大道至简的架构设计思想之:封装(C系架构设计法,sishuok)的更多相关文章
- 大道至简---软件工程实践者的思想------------java伪代码形式读后感第一章
import.java.大道至简.*; 1.编程的精义----愚公移山 /* 原始需求的产生:惩山北之塞,出入之迂 项目沟通的基本方式:聚室而谋曰 项目的目标:毕力平险,指通豫南,达于汉阴 技术方案: ...
- 读<大道至简>--软件工程实践者的思想有感
初闻其名,<大道至简>,大多人都会觉得这是一本满腹人生哲理的书籍,作者洋洋洒洒的谈论大道理,其实不然,作者以古典文化为引,以作者的所思所想为线,启蒙了我作为一个软件工程初学者的实践思想. ...
- Mysql高手系列 - 第27篇:mysql如何确保数据不丢失的?我们借鉴这种设计思想实现热点账户高并发设计及跨库转账问题
Mysql系列的目标是:通过这个系列从入门到全面掌握一个高级开发所需要的全部技能. 欢迎大家加我微信itsoku一起交流java.算法.数据库相关技术. 这是Mysql系列第27篇. 本篇文章我们先来 ...
- FPGA设计思想与技巧(转载)
题记:这个笔记不是特权同学自己整理的,特权同学只是对这个笔记做了一下完善,也忘了是从那DOWNLOAD来的,首先对整理者表示感谢.这些知识点确实都很实用,这些设计思想或者也可以说是经验吧,是很值得每一 ...
- FPGA/CPLD设计思想与技巧
本文讨论的四种常用FPGA/CPLD设计思想与技巧:乒乓操作.串并转换.流水线操作.数据接口同步化,都是FPGA/CPLD逻辑设计的内在规律的体现,合理地采用这些设计思想能在FPGA/CPLD设计工作 ...
- 【学习笔记】【Design idea】一、Java异常的设计思想、性能相关、笔记
1.前言: 异常.本该是多么优雅的东西,然而,得全靠自己在零散的信息中汇集. 学习笔记保持更新. 2.教材(参考资料) 其他 ①受检异常与非受检异常:https://www.cnblogs.com/j ...
- Python学习笔记之 Python设计思想&设计原则
Python设计思想&设计原则 设计思想 1.封装 数据角度 多种数据合为一种数据 优势:代码可读性高 将数据与行为相关联 例如:电脑(内存,储存空间,...) 行为角度 ...
- java设计模式--基础思想总结--抽象类与架构设计思想
抽象类?这个东西我感觉没什么卵用啊,又不能拿来new对象,没有具体的对象的抽象类,有什么实际的意义呢?这是很多刚刚接触java抽象类语法时的第一反应(当然,包括我).确实,很多刚刚接触抽象类这个概念的 ...
- CSS组件架构的设计思想
不管是设计思想,还是架构,都可以总结为一个词:AO模式.A表示Append,即“附加”的意思,O表示Overwrite,即“重写”的意思.所有的CSS组件都是沿用这种思想来设计的.这也是CSS的特性, ...
- 从一般分布式设计看HDFS设计思想与架构
要想深入学习HDFS就要先了解其设计思想和架构,这样才能继续深入使用HDFS或者深入研究源代码.懂得了"所以然"才能在实际使用中灵活运用.快速解决遇到的问题.下面这篇博文我们就先 ...
随机推荐
- python自然语言处理(NLP)1------中文分词1,基于规则的中文分词方法
python中文分词方法之基于规则的中文分词 目录 常见中文分词方法 推荐中文分词工具 参考链接 一.四种常见的中文分词方法: 基于规则的中文分词 基于统计的中文分词 深度学习中文分词 混合分词方法 ...
- 一步步带你设计MySQL索引数据结构
前言 MySQL的索引是一个非常重要的知识点,也基本上是面试必考的一个技术点,所以非常重要.那你了解MySQL索引的数据结构是怎么样的吗?为什么要采用这样的数据结构? 现在化身为MySQL的架构师,一 ...
- VideoPipe可视化视频结构化框架更新总结(2022-12-9)
项目地址:https://github.com/sherlockchou86/video_pipe_c 往期文章:https://www.cnblogs.com/xiaozhi_5638/p/1685 ...
- 痞子衡嵌入式:我被邀请做贸泽电子&与非网联合推出的《对话工程师》节目嘉宾
<对话工程师>是「贸泽电子」赞助.「与非网」制作的一档网络节目,自2022年11月起,邀请不同技术领域的资深工程师,聊聊开发过程中的经验感悟,栏目共 10 期,痞子衡有幸被邀请做了第 4 ...
- MYSQL下载 环境配置 修改密码 基本SQL语句
目录 存取数据的演变史 数据库软件应用史 数据库的本质 数据库的分类 关系型数据库 特征 常见关系型数据库 非关系型数据库 特征 常见非关系型数据库 mysql简介 mysql下载 启动mysql 系 ...
- Jenkins&&gitlab2
Jenkins slave 添加jenkins slave节点: jenkins slave节点创建工作目录与基本环境配置,如果jenkins slave节点需要clone代码和执行java 代码编 ...
- adb环境配置及常用命令
一.adb环境配置 1.下载并安装adb驱动 2.下载adb工具platform-tools.rar,解压放在某个文件夹下 3.右击此电脑->属性->高级系统设置->环境变量-> ...
- 万字长文解析Scaled YOLOv4模型(YOLO变体模型)
一,Scaled YOLOv4 摘要 1,介绍 2,相关工作 2.1,模型缩放 3,模型缩放原则 3.1,模型缩放的常规原则 3.2,为低端设备缩放的tiny模型 3.3,为高端设备缩放的Large模 ...
- 【架构设计】你真的理解软件设计中的SOLID原则吗?
前言 在软件架构设计领域,有一个大名鼎鼎的设计原则--SOLID原则,它是由由Robert C. Martin(也称为 Uncle Bob)提出的,指导我们写出可维护.可以测试.高扩展.高内聚.低耦合 ...
- SOFAJRaft源码阅读-Netty时间轮算法的实践
SOFAJRaft的定时任务调度器是基于Netty来实现的,所以本文将会基于Netty时间轮算法,然后再结合SOFAJRaft源码进行分析. @Author:Akai-yuan @更新时间:2023/ ...