首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

代码重构(二):重构规则

如果一个有太多行为,或者与另一个有太多合作而形成高度耦合。此时就应该将该方法搬移到其高度依赖的中。...说白了就是在另一个中创建一个相同的功能的新函数,将旧函数变成一个单纯的委托函数,或者将旧函数完全移除。搬移后,我们可以再使用函数的重构规则对新组的函数进行重构。...下方就通过一个实例来直观的感受一下Move Method。 1.代码实例 在下方截图中有两个一个Book,另一个是BookCustomer。...再仔细分析,其中的Switch语句中的业务逻辑的全是Book的东西,和当前BookCustomer没用什么关联。...当然,对的细化也是为了减少代码的重复性,以及提高代码的复用性,便于代码的维护。下方将会通过一个实例,对进行提炼。 1.重构前的代码 下方是我们将要进行重构的代码段。

1.3K100
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    C++】构建第一个C++:Date

    Date成员变量 通常来说,一个日期是由三部分构成的,分别是:年,月,日。...private: int _year; int _month; int _day; }; Date默认成员函数 Date构造函数 C++一个包含6个默认成员函数,如下:...对于的六个默认成员函数还不了解的朋友可以移步: 【C++的六大默认成员函数及其特性(万字详解) 综上所述,对于日期中的6个默认成员函数,我们只需要自己实现一下构造函数即可...:【C++的六大默认成员函数及其特性(万字详解) 其中有关于运算符重载的入门级详解: 判断日期变量大于 判断日期变量的大小,其算法逻辑可以分为四个步骤,即: 先判断年是否大于...综上,根据算法逻辑以及C++语言特性,判断日期变量大于函数如下: bool Date::operator>(const Date& x) const { if (_year > x.

    9610

    代码重构重构的 8 个小技巧

    就要运用一些重构的技巧,来让代码结构保持整洁,从而让后续的需求扩展更加稳定 1:合理的分配函数 说明:从 OOP 的角度来考虑,如果函数之间频繁的调用,显然适合放在一个对象当中 使用场景:在 A 对象内...4:合并小 说明:这里是和 拆解大类 逻辑完全相反的的技巧 说用场景:如果一个没有做太多的事情,就要考虑把它和相似的合并在一起,这样做的目的是: 尽可能保证和控制每个的职责在一个合理的范围之内...的方式,可以把程序重构为以下这样: Date previousEnd = new Date(); Date newStart = nextDay(previousEnd); // 提炼一个函数,作为...所以我们需要用增强工具来解决这个问题 示例一 我们还是使用上面的 nextDay() 扩展函数来举例,假如这个函数会经常被用到,那么我们就需要增强它,做法如下: 新建一个扩展,然后继承工具(例如...,建议使用 增强工具 的方式重构显然更加的合适

    1.2K20

    如何设计一个C++

    然后我们就可以进一步将现实世界中的轨道和片段抽象成了,可分为两个一个轨道一个片段,两个是否需要提供拷贝构造函数和移动构造函数,完全取决于它们在现实世界的样子。...对于普通成员变量,我全是private,除非该类作为基,而子类也需要访问父的私有成员,这时候我会将父的private改为protected。什么时候public呢?...关于异常处理详细的介绍可以看我这篇文章:《你的c++团队还在禁用异常处理吗?》...单一职责原则:一个只做一件事,一个应该仅有一个引起它变化的原因,并且变化的方向隐含着的责任。...tips:对于设计模式而言,不能一步到位,刚开始编程时不要把太多精力放到设计模式上,需求总是变化的,刚开始着重于实现,一般敏捷开发后为了应对变化重构再决定采取合适的设计模式。

    1.5K20

    JavaScript重构技巧 — 函数和

    在本文中,我们将介绍一些与清理 JavaScript 函数和有关的重构思想。 不要直接对参数赋值 在使用参数之前,我们应该删除对参数的赋值,并将参数值赋给变量。...函数替换方法 我们可以将一个方法变成自己的函数,以便所有都可以访问它。...移动方法 在两个之间,我们可以把其中一个的方法移动到另一个中,例如,我们可能会写这样的代码: class Foo { method() {} } class Bar { } 假如,我们在 Bar...phoneNumber; } addAreaCode(areaCode) { return `${areaCode}-${this.phoneNumber}` } } 我们可以这样重构...通过这样做,两个只做一件事,而不是让一个做多件事。 总结 我们可以从复杂的中提取代码,这些复杂的可以将多种功能添加到自己的中。 此外,我们可以将方法和字段移动到最常用的地方。

    70810

    Flutter 重构你的应用

    OED 的客户端团队已经 Flutter 做了一个 iPad 版本, 因此我也想独立尝试一下,正如之前的文章当 Flutter 遇见 Web,会有怎样的秘密 中提到的,光说不练假把式,实践方可出真知。...而 Native 下沉到 基础组件 和 底层核心库 的性能优化,就类似的理解就像后台服务把接入层交给 Nodejs 去处理,而 C++ 专注做算法和数据中台。     ...如果您写过 C++ 或者 Java 的话,理解起来会非常简单。构造函数可以方便您初始化对象,函数的继承采用单一集成的方式,不像 C++ 那样可以同时继承于多个。...后续,有时间了可以把代码进行重构和优化。历史包袱很多时候,都是新人搞出来的事情。你是不是似曾相识了,发现团队里面一个非常重要的项目,最开始的设计居然是实习生搞的!...层叠样式 可以 Stack 和 Positioned 进行处理。比如下面红色区域,即可以 Stack 处理,也可以 Row 进行排版。

    68320

    ChatGPT 重构工作流程

    以往的工作方式,不管你何种职业,AI 都可以从某个角度切入进去,这一波 AI 强大能力的基础是大语言模型(LLM),机器可以深度理解人的自然语言,不管是文字还是声音,这是一个巨大的进步。...为什么讲重构?结果一样,甚至结果更好,只不过中间过程变了。...设计师基于 AI生成的草图进行二次创作;程序员基于一个 AI 生成的代码修修补补就可以用了;自媒体从业者拿 AI 生成的脚本来剪辑视频甚至 AI 自动成片;投行分析师把直接从 AI 里拿对比数据;会议纪借助...遇到问题时,思维上,先把 AI 摆出来,看看能不能解决,过滤后解决不了再寻求其他解决方案,相当于在中间多增加了一个环节,不是每个人都可以找到还厉害的人帮自己解决问题,AI 代表了一种平权特性。...注:这里的 ChatGPT 可以理解为以 ChatGPT 为代表的一 AI 应用,不局限于只认这一个

    20420

    C++实现一个简单的String

    C++实现一个简单的String 使用基本的C++知识实现一个简单的String,这个中包含了C++常用的知识点。感觉是很有意思的一个小代码片段。...声明 该类中包含了三个构造函数:有参数的构造函数,拷贝构造函数已经移动构造函数 重载了[],=(一个普通赋值运算符,一个移动赋值运算符),+,==四个运算符 一个用于求字符长度的方法;一个用于获取...output, const String& str); friend std::istream& operator>>(std::istream& input, String& str); }; 实现...init(str); cout << "默认构造函数(" << *this << ")\n"; } String::String(const String& other) { // 在的成员函数中可以访问同类型实例的私有变量...9 析构函数(HelloWord) 析构函数(Word) 析构函数(Hello) 主程序中的第7行和第11行各自调用一次默认的有参构造函数,第14行是重载的加法运算符中调用了一次无参的构造函数(由于C+

    1.6K10

    重构》第七章 - 读后感(重构要点)

    上一章大概得学习了一下函数重构的手法,主要有9种。但是平心而论,有多少人还是随心所欲的写代码?所以我们做任何事情的时候还是得静下心来,把它当作一个艺术品去对待,才可能会有质的提升,而我们都提浮躁了。...我们不能让一个普通的安保人员去做科学家做的事情。对应到面向对象就是一个如果做了其他做的事情,那么这样的就应该进行边界的划分。...一般来说本人觉得参数应该是比较少的,如果参数比较多的话,就可以采用第六章代理对象的方式去重构!...2.搬移字段 如果一个字段在所驻守的之外的另一个中用到的更多,那么就在那个中新建一个字段,修改源字段的所有使用者,让其使用新的中的字段。...7.引入外加函数 你需要为提供服务的增加一个函数,但是无法修改这个。那么我们就需要在调用方那里创建一个函数,并将无法修改的的函数的实体作为参数传入,然后做我们相关的逻辑。

    25410

    django 入门:通用视图重构视图

    ,对视图进行重构 2 利用 django 通用视图创建视图 1.创建视图 import markdown from django.shortcuts import render from django.views.generic...,从 url 捕获的命名组参数值保存在实例的 kwargs 中,是一个字典 # 非命名组参数值保存在实例的 args 中,是一个列表 category = get_object_or...model = Post template_name = 'blog/detail.html' context_objects_name = 'post' # 方法返回一个...获取下一页的页码 3 print(page2.previous_page_number()) # 获取上一页的页码 1 print(page2.start_index()) # 当前页第一个...item 在列表中的位置 3 print(page2.end_index()) # 当前页最后一个 item 在列表中的位置 4 最后附上整个项目的地址:blog_project https

    88720

    C++】深度解析: C++ 模拟实现 list ,探索其底层实现细节

    list的底层是双向链表结构,双向链表中每个元素存储在互不相关的独立节点中,在节点中通过指针指向其前一个元素和后一个元素。...模拟实现list,要实现下列三个: ①list节点 ②迭代器的 ③list主要功能的(size(),empty()...)...模拟实现list的的基本功能(增删等操作)要建立在迭代器和节点均已实现好的情况下才得以完成。...✨list 节点 定义list中的节点ListNode,包含前驱指针,后驱指针和数据变量; 使用struct而不使用class定义,是为了方便访问每个一个节点 ,struct默认是pbulic,而class...将原生态指针进行封装,因迭代器使用形式与指针完全相同,因此在自定义的中必须实现以下方法: 指针可以解引用,迭代器的中必须重载operator*() 指针可以通过->访问其所指空间成员,迭代器中必须重载

    6510
    领券