当前位置: 首页 > news >正文

《重构》:Extract Class and Inline Class

hey,gays lets go on to refator those sh!t .

i fork a rep, this the link

GitHub - TIMPICKLE/refator-code: 重构 - 改善既有代码的设计

all right, lets see the genel description.

提取类

对立:内联类

目的:将大类分成小类

场景:维护一个大量函数和数据的类

class Person{get officeAreaCode(){return this._officeAreaCode;}get officeNumber(){return this._officeNumber;}
}
class Person{constructor(telephoneNumber){this._telephoneNumber = telephoneNumber;}get officeAreaCode(){return this._telephoneNumber.areaCode;}get officeNumber(){return this._telephoneNumber.number;}
}
class TelephoneNumber{get areaCode(){return this._areaCode;}get number(){return this._number;}
}
内联类

对立:提炼类

目的:减少不必要的类

场景:

如果一个类不再承担足够的责任
重新分类两个类的不同职责

class Person{constructor(telephoneNumber){this._telephoneNumber = telephoneNumber;}get officeAreaCode(){return this._telephoneNumber.areaCode;}get officeNumber(){return this._telephoneNumber.number;}
}
class TelephoneNumber{get areaCode(){return this._areaCode;}get number(){return this._number;}
}
class Person{get officeAreaCode(){return this._officeAreaCode;}get officeNumber(){return this._officeNumber;}
}

我在阅读重构的时候,对内联类和提取类有一些疑问,他们看起来是对立的,那么在实际的代码中,我该如何选择呢?给我一些具体的例子?

在实际的代码中,选择内联类还是提取类取决于具体情况。下面是一些例子,可以帮助你更好地理解:

**内联类的例子**

如果一个类只有少量的属性和方法,而且这个类在整个代码中只被使用了一次,那么你可以考虑将这个类内联到使用它的地方。这样可以减少类的数量,使代码更加简洁。

例如,假设你有一个 `Person` 类和一个 `Address` 类,每个人都有一个地址。如果你只在 `Person` 类中使用了 `Address` 类一次,那么你可以将 `Address` 类内联到 `Person` 类中,使代码更加简洁。

**提取类的例子**

如果一个类的职责过于复杂,包含了多个不同的职责或功能,那么你可以考虑将这个类拆分成多个小的类。这样可以使代码更加清晰,并且每个类只需要关注自己的职责。

例如,假设你有一个 `Order` 类,这个类既包含了订单信息,又包含了订单处理的逻辑。如果你将订单处理逻辑提取成一个独立的类,比如 `OrderProcessor` 类,那么代码会更加清晰,并且每个类都只需要关注自己的职责。

希望这些例子可以帮助你更好地理解内联类和提取类的使用场景。

有代码实例吗?

当然,以下是一些具体的C#代码示例,以帮助您更好地理解内联类和提取类:

**内联类的示例:**

public class Person {public string Name { get; set; }public Address Address { get; set; }public void PrintAddress() {Console.WriteLine("Address: " + this.Address.ToString());}// other methods
}public class Address {public string Street { get; set; }public string City { get; set; }public string State { get; set; }public string ZipCode { get; set; }public override string ToString() {return $"{this.Street}, {this.City}, {this.State} {this.ZipCode}";}
}

在上面的代码中,`Person` 类只使用了一次 `Address` 属性,并且只有一个方法使用了这个属性。因此,我们可以将 `Address` 类内联到 `Person` 类中,使代码更加简洁:

public class Person {public string Name { get; set; }public string Street { get; set; }public string City { get; set; }public string State { get; set; }public string ZipCode { get; set; }public void PrintAddress() {Console.WriteLine($"Address: {this.Street}, {this.City}, {this.State} {this.ZipCode}");}// other methods
}

**提取类的示例:**

public class Order {public int OrderId { get; set; }public string CustomerName { get; set; }public string CustomerAddress { get; set; }public List<OrderItem> Items { get; set; }public void ProcessOrder() {// process the order}// other methods
}

在上面的代码中,`Order` 类包含了订单信息和订单处理的逻辑。如果我们将订单处理逻辑提取成一个独立的类 `OrderProcessor`,那么代码会更加清晰,并且每个类都只需要关注自己的职责:

public class Order {public int OrderId { get; set; }public string CustomerName { get; set; }public string CustomerAddress { get; set; }public List<OrderItem> Items { get; set; }// other methods
}public class OrderProcessor {public void ProcessOrder(Order order) {// process the order}
}

希望这些示例可以帮助您更好地理解内联类和提取类的使用场景。

相关文章:

《重构》:Extract Class and Inline Class

hey&#xff0c;gays lets go on to refator those sh!t . i fork a rep, this the link GitHub - TIMPICKLE/refator-code: 重构 - 改善既有代码的设计 all right, lets see the genel description. 提取类 对立&#xff1a;内联类 目的&#xff1a;将大类分成小类 场景&a…...

腾讯云对象存储联合DataBend云数仓打通数据湖和数据仓库

随着数字化进程不断深入&#xff0c;数据呈大规模、多样性的爆发式增长。为满足更多样、更复杂的业务数据处理分析的诉求&#xff0c;湖仓一体应运而生。在Gartner发布的《Hype Cycle for Data Management 2021》中&#xff0c;湖仓一体&#xff08;Lake house&#xff09;首次…...

ExceptionLess windows部署。

前言 windows部署 1、一个api项目&#xff0c;里面包含了所有api。 2、一个elasticsearch项目&#xff0c;用来存储相关数据。 3、一个UI项目&#xff0c;也就是查看异常、设置新异常邮件通知等操作的后台。 异常在客户端提交的代码原理&#xff1a;一个异常被提交&#xff0c;…...

使用python实现1DCNN-GRU回归预测

要实现1DCNN-GRU进行回归预测&#xff0c;您可以使用以下Python代码作为参考&#xff1a; 首先&#xff0c;导入所需的库&#xff1a; import numpy as np import tensorflow as tf from tensorflow.keras.layers import Conv1D, MaxPooling1D, GlobalAveragePooling1D, GRU,…...

移动端数据可视化设计

在做APP设计的时候&#xff0c;难免会遇到一些需要展示数据的场景。使用传统的表格和文档展示数据不仅难看&#xff0c;也影响用户理解数据的含义。而数据可视化设计能将数据以更加直观的方式展现出来&#xff0c;使数据更加客观、更有说服力。 在移动应用中&#xff0c;数据可…...

Linux文件系统概述

本文已收录至《Linux知识与编程》专栏&#xff01; 作者&#xff1a;ARMCSKGT 演示环境&#xff1a;CentOS 7 文件系统概述 前言正文文件与磁盘磁盘介绍与机械硬盘机械硬盘基础结构机械硬盘数据存储与管理 文件操作的细节创建文件访问文件删除文件恢复文件其他情况 最后 前言 …...

go专业数据结构与算法

go语言之专业数据结构与算法 2.数组概念 3.golang实现数组结构 4.golang实现数组迭代器 5.数组栈的高级实现 6.栈模拟低级递归 7.斐波那契数列栈模拟递归 8.递归实现文件夹遍历 9.栈模拟文件递归 10.层级展示文件夹 11.数组队列的实现 12.队列实现遍历文件夹 13.循环队列 14.链…...

Hive on Spark的小文件设置参数

Hive on Spark的小文件设置参数 参数调优 了解完了Spark作业运行的基本原理之后&#xff0c;对资源相关的参数就容易理解了。所谓的Spark资源参数调优&#xff0c;其实主要就是对Spark运行过程中各个使用资源的地方&#xff0c;通过调节各种参数&#xff0c;来优化资源使用的效…...

高级SQL语句

目录 MySQL 高级(进阶) SQL 语句函数数学函数&#xff1a;聚合函数字符串函数&#xff1a; 连接查询inner join(内连接)&#xff1a;left join(左连接)&#xff1a;right join(右连接)&#xff1a; CREATE VIEW&#xff08;视图&#xff09;UNION&#xff08;联集&#xff09;C…...

IDE /skipping incompatible xxx_d.dll when searching for -lxxx_d

文章目录 概述场景复现用以测试的代码编译器位数不匹配导致?保持编译器类型一致再验证编译器位数的影响MingW下调用OS的库咋不告警?以mingW下使用winSocket为例MingW下网络编程的头文件分析该环境下链接的ws2_32库文件在哪里&#xff1f;mingW为啥可以兼容window下的动态库 概…...

C语言学习准备-编辑器选择

今天继续给大家更新C语言经典案例 今天的案例会比昨天稍微有一些难度&#xff0c;但是同时还是非常经典的案例 本来是想给大家继续更新C语言经典案例&#xff0c;但是有朋友反应C语言编辑器的选择&#xff0c;刚好我自己也是想更换一下C语言的编辑器&#xff0c;跟大家分享一下…...

微信为什么使用 SQLite 保存聊天记录?

概要 SQLite 是一个被大家低估的数据库&#xff0c;但有些人认为它是一个不适合生产环境使用的玩具数据库。事实上&#xff0c;SQLite 是一个非常可靠的数据库&#xff0c;它可以处理 TB 级的数据&#xff0c;但它没有网络层。接下来&#xff0c;本文将与大家共同探讨 SQLite 在…...

VB串口通讯方式解释

目前,Visual Basic (简称VB) 已成为WINDOWS 系统开发的主要语言,以其高效、简单易学及功能强大的特点越来越为广大程序设计人员及用户所青睐。VB 支持面向对象的程序设计,具有结构化的事件驱动编程模式并可以使用无限扩增的控件。在VB 应用程序中可以方便地调用WINDOWS API函数…...

Mybatis-Plus不能更新对象字段为空值问题解决

问题描述&#xff1a; 在使用Mybatis-Plus调用updateById方法进行数据更新默认情况下是不能更新空值字段的&#xff0c;而在实际开发过程中&#xff0c;往往会遇到需要将字段值更新为空值的情况&#xff0c;该如何解决呢&#xff1f; 原因分析&#xff1a; Mybatis-Plus中字…...

d3dx9_43.dll丢失怎么解决

d3dx9_43.dll丢失的影响 当我们在运行某些需要DirectX 9支持的程序时&#xff0c;如果系统中缺少d3dx9_43.dll文件&#xff0c;就会出现错误提示&#xff0c;导致程序无法正常启动。这个错误提示通常会类似于“找不到d3dx9_43.dll”或“d3dx9_43.dll不存在”。 打开电脑浏览器…...

【花雕】全国青少年机器人技术一级考试备考实操搭建手册8

随着科技的不断进步&#xff0c;机器人技术已经成为了一个重要的领域。在这个领域中&#xff0c;机械结构是机器人设计中至关重要的一部分&#xff0c;它决定了机器人的形态、运动方式和工作效率。对于青少年机器人爱好者来说&#xff0c;了解机械结构的基础知识&#xff0c;掌…...

【UE5 Cesium】09-Cesium for Unreal 子关卡应用实例(下)

效果 通过按钮点击事件实现子关卡的切换 步骤 新建两个Actor蓝图作为GeoMarker&#xff0c;分别命名为“BP_GeoMarker_BeiJing”、“BP_GeoMarker_ShangHai” 分别打开这两个蓝图&#xff0c;添加文本渲染组件 在指定的地理位置上拖入蓝图“BP_GeoMarker_BeiJing” 控制“BP_…...

插值应用案例2

案例1 高点和高程 在一丘陵地带测量高程&#xff0c;x和y方向每隔100m测一个点&#xff0c;得到高程如下表所列&#xff0c;试插值一曲面&#xff0c;确定合适的模型&#xff0c;并由此测到最高点和相应的高程。 x0/z0\y0 100 200 300 400 500 100 636 697 624 478 …...

【新星计划Linux】——常用命令(1)

作者简介&#xff1a;一名云计算网络运维人员、每天分享网络与运维的技术与干货。 座右铭&#xff1a;低头赶路&#xff0c;敬事如仪 个人主页&#xff1a;网络豆的主页​​​​​ 目录 前言 一.常用命令 1.Linux的基本原则&#xff1a; 用户接口&#xff1a; 2.命令形…...

python应用-excel和数据库的读取及写入操作

近日完成一个交办任务&#xff0c;从excel表读取数据&#xff0c;根据ID在数据库表匹配相应的记录&#xff0c;并回填至excel表里。我使用的工具是python。下面记录下相应的模块。 一、从excel表读取数据 import pandas as pd import numpy as npdef read_excel():path &quo…...

Java 语言特性(面试系列2)

一、SQL 基础 1. 复杂查询 &#xff08;1&#xff09;连接查询&#xff08;JOIN&#xff09; 内连接&#xff08;INNER JOIN&#xff09;&#xff1a;返回两表匹配的记录。 SELECT e.name, d.dept_name FROM employees e INNER JOIN departments d ON e.dept_id d.dept_id; 左…...

PHP和Node.js哪个更爽?

先说结论&#xff0c;rust完胜。 php&#xff1a;laravel&#xff0c;swoole&#xff0c;webman&#xff0c;最开始在苏宁的时候写了几年php&#xff0c;当时觉得php真的是世界上最好的语言&#xff0c;因为当初活在舒适圈里&#xff0c;不愿意跳出来&#xff0c;就好比当初活在…...

django filter 统计数量 按属性去重

在Django中&#xff0c;如果你想要根据某个属性对查询集进行去重并统计数量&#xff0c;你可以使用values()方法配合annotate()方法来实现。这里有两种常见的方法来完成这个需求&#xff1a; 方法1&#xff1a;使用annotate()和Count 假设你有一个模型Item&#xff0c;并且你想…...

最新SpringBoot+SpringCloud+Nacos微服务框架分享

文章目录 前言一、服务规划二、架构核心1.cloud的pom2.gateway的异常handler3.gateway的filter4、admin的pom5、admin的登录核心 三、code-helper分享总结 前言 最近有个活蛮赶的&#xff0c;根据Excel列的需求预估的工时直接打骨折&#xff0c;不要问我为什么&#xff0c;主要…...

ESP32 I2S音频总线学习笔记(四): INMP441采集音频并实时播放

简介 前面两期文章我们介绍了I2S的读取和写入&#xff0c;一个是通过INMP441麦克风模块采集音频&#xff0c;一个是通过PCM5102A模块播放音频&#xff0c;那如果我们将两者结合起来&#xff0c;将麦克风采集到的音频通过PCM5102A播放&#xff0c;是不是就可以做一个扩音器了呢…...

【单片机期末】单片机系统设计

主要内容&#xff1a;系统状态机&#xff0c;系统时基&#xff0c;系统需求分析&#xff0c;系统构建&#xff0c;系统状态流图 一、题目要求 二、绘制系统状态流图 题目&#xff1a;根据上述描述绘制系统状态流图&#xff0c;注明状态转移条件及方向。 三、利用定时器产生时…...

【Web 进阶篇】优雅的接口设计:统一响应、全局异常处理与参数校验

系列回顾&#xff1a; 在上一篇中&#xff0c;我们成功地为应用集成了数据库&#xff0c;并使用 Spring Data JPA 实现了基本的 CRUD API。我们的应用现在能“记忆”数据了&#xff01;但是&#xff0c;如果你仔细审视那些 API&#xff0c;会发现它们还很“粗糙”&#xff1a;有…...

【论文阅读28】-CNN-BiLSTM-Attention-(2024)

本文把滑坡位移序列拆开、筛优质因子&#xff0c;再用 CNN-BiLSTM-Attention 来动态预测每个子序列&#xff0c;最后重构出总位移&#xff0c;预测效果超越传统模型。 文章目录 1 引言2 方法2.1 位移时间序列加性模型2.2 变分模态分解 (VMD) 具体步骤2.3.1 样本熵&#xff08;S…...

Spring AI与Spring Modulith核心技术解析

Spring AI核心架构解析 Spring AI&#xff08;https://spring.io/projects/spring-ai&#xff09;作为Spring生态中的AI集成框架&#xff0c;其核心设计理念是通过模块化架构降低AI应用的开发复杂度。与Python生态中的LangChain/LlamaIndex等工具类似&#xff0c;但特别为多语…...

Rapidio门铃消息FIFO溢出机制

关于RapidIO门铃消息FIFO的溢出机制及其与中断抖动的关系&#xff0c;以下是深入解析&#xff1a; 门铃FIFO溢出的本质 在RapidIO系统中&#xff0c;门铃消息FIFO是硬件控制器内部的缓冲区&#xff0c;用于临时存储接收到的门铃消息&#xff08;Doorbell Message&#xff09;。…...