《重构2》第七章-封装

简介: 《重构2》第七章-封装

封装的意义,在于提炼相同的代码逻辑,借以复用!
同时,类,也是用来隐藏部分信息的好方法!

1.封装记录

通俗说法就是,将变量对象或需要处理的数据,或不想改变原有值的对象数据,将其封装在一个类中,暴露各种获取方法,产生逻辑所需要的各种数据!
多用于数据转化、深拷贝、格式化数据等等...
同时缺点也明显,在复制巨大数据结构时,性能消耗大,按需使用!

2. 封装集合

封装记录后返回只读数据/副本数据,即深拷贝后的新数据,避免外部操作,引发数据源的变动;
基于以上操作,你需要在类中添加新增/修改/移除函数,用于修改函数树脂,避免在外部操作数据!

3.以对象代替基本类型

在重构一中,也称为以类取代类型码
当一份数据不局限于展示时,就可以为其创建一个类,尽管初期很繁琐,的却,但是,当业务越来越复杂,这个类的好处就越明显!
给这个数据一个取值函数,这是基础的!

4.以查询取代临时变量

某些只需要使用一次的计算,且不再改变的变量,可以直接忽略声明,直接在逻辑中以函数代替

5.提炼类/内联类

提炼类和内连类是相反的操作
提炼类:当一个类中函数过于庞大,过于多时,或让这个类难以被人理解,可以考虑将部分功能拆分为更为具体的类,活着提炼一部分超类出来!
内联类:当一个类中的函数逐渐被优化、被废弃、被提炼,最终只剩下为数不多的细小的功能,可以考虑将类废弃,并将函数直接放到具体的代码逻辑中

6.隐藏委托关系/移除中间人

简而言之,就是常见一个类,将客户端的链式调用,放到一个函数中,可以端只需要带哦用一个类就可以获取到想要的值,而不用关心数据之间的链式调用
例如:客户端需要知道某人的经理是谁
后端:
Class Person

constrctor(name){
  this._name = name
}
get name(){return this.name;}
get department(){return this._department;}
set department(arg){this._department = args;}

Class Deparment


get manager(){return this._manager;}
set manager(arg){this._manager = args;}

客户端调用:

manager = aPerson.department.manager;

优化后:
Class Person

get manager(){return this._department.manager;}

客户端调用

manager = aPerson.manager;

移除中间人:这种操作是按代码情况而定,当不需要隐藏委托关系时,就可以去除中间人。
为什么要移除中间人,当隐藏的委托关系过多时,就完全变成了一个数据中转站,这并不是我们想要的操作,我们要的是轻量级,这样沉重的操作就需要被优化调!

7.替换算法

将一些复杂的算法,拆分为多了小的算法,最后组合长想要的数据,算法也是需要根据时代去变化的,比如,es6中的includs方法就很好的代替了es5中的find方法,不是吗?

目录
相关文章
|
数据可视化 PyTorch 算法框架/工具
Pytorch可视化Visdom、tensorboardX和Torchvision
Pytorch可视化Visdom、tensorboardX和Torchvision
219 0
|
人工智能 搜索推荐 开发者
AI驱动的游戏设计:创造更智能、更沉浸的游戏体验
【7月更文第31天】人工智能(AI)技术正在深刻地改变游戏行业,不仅为游戏设计师提供了创造更丰富、更动态游戏世界的工具,也为玩家带来了更加个性化和沉浸式的体验。本文将探讨AI在游戏设计中的应用案例,并展示一些具体的实现方法。
2062 2
|
编解码 异构计算
一个软件,实现类似HDMI显卡欺骗器功能
一个软件,实现类似HDMI显卡欺骗器功能
15385 1
一个软件,实现类似HDMI显卡欺骗器功能
|
网络协议 数据安全/隐私保护
Socks5代理和HTTP代理有哪些优缺点?
SOCKS5和HTTP代理对比:SOCKS5支持TCP/UDP,提供身份验证和数据加密,性能优但无法处理HTTP头部信息;HTTP代理能读取头部做细粒度控制,广泛支持但仅限HTTP协议,可能影响性能。选择取决于具体需求和应用支持。
|
Python
BackTrader 中文文档(一)(3)
BackTrader 中文文档(一)
255 0
|
存储 Prometheus Cloud Native
Grafana 系列 - 统一展示 -2-Prometheus 数据源
Grafana 系列 - 统一展示 -2-Prometheus 数据源
|
设计模式 算法 C++
设计模式之模板模式(C++)
设计模式之模板模式(C++)
107 0
|
前端开发 JavaScript 数据库
|
XML Oracle 前端开发
理论:第二章:Spring的AOP和IOC是什么?使用场景有哪些?Spring事务与数据库事务,传播行为,数据库隔离级别
理论:第二章:Spring的AOP和IOC是什么?使用场景有哪些?Spring事务与数据库事务,传播行为,数据库隔离级别
175 0
|
机器学习/深度学习 存储 人工智能
【NLP】(task3下)预训练语言模型——GPT-2
OpenAI GPT-2( https://openai.com/blog/better-language-models/)表现出了令人印象深刻的能力,它能够写出连贯而充满激情的文章,这超出了我们当前对语言模型的预期效果。GPT-2 不是一个特别新颖的架构,而是一种与 Transformer 解码器非常类似的架构。不过 GPT-2 是一个 巨大的、基于 Transformer 的语言模型(只有 Decoder 的 Transformer),它是在一个巨大的数据集上训练的。
897 0
【NLP】(task3下)预训练语言模型——GPT-2