《重构》: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,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. 提取类 对立:内联类 目的:将大类分成小类 场景&a…...
腾讯云对象存储联合DataBend云数仓打通数据湖和数据仓库
随着数字化进程不断深入,数据呈大规模、多样性的爆发式增长。为满足更多样、更复杂的业务数据处理分析的诉求,湖仓一体应运而生。在Gartner发布的《Hype Cycle for Data Management 2021》中,湖仓一体(Lake house)首次…...
ExceptionLess windows部署。
前言 windows部署 1、一个api项目,里面包含了所有api。 2、一个elasticsearch项目,用来存储相关数据。 3、一个UI项目,也就是查看异常、设置新异常邮件通知等操作的后台。 异常在客户端提交的代码原理:一个异常被提交,…...
使用python实现1DCNN-GRU回归预测
要实现1DCNN-GRU进行回归预测,您可以使用以下Python代码作为参考: 首先,导入所需的库: import numpy as np import tensorflow as tf from tensorflow.keras.layers import Conv1D, MaxPooling1D, GlobalAveragePooling1D, GRU,…...
移动端数据可视化设计
在做APP设计的时候,难免会遇到一些需要展示数据的场景。使用传统的表格和文档展示数据不仅难看,也影响用户理解数据的含义。而数据可视化设计能将数据以更加直观的方式展现出来,使数据更加客观、更有说服力。 在移动应用中,数据可…...
Linux文件系统概述
本文已收录至《Linux知识与编程》专栏! 作者:ARMCSKGT 演示环境: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作业运行的基本原理之后,对资源相关的参数就容易理解了。所谓的Spark资源参数调优,其实主要就是对Spark运行过程中各个使用资源的地方,通过调节各种参数,来优化资源使用的效…...
高级SQL语句
目录 MySQL 高级(进阶) SQL 语句函数数学函数:聚合函数字符串函数: 连接查询inner join(内连接):left join(左连接):right join(右连接): CREATE VIEW(视图)UNION(联集)C…...
IDE /skipping incompatible xxx_d.dll when searching for -lxxx_d
文章目录 概述场景复现用以测试的代码编译器位数不匹配导致?保持编译器类型一致再验证编译器位数的影响MingW下调用OS的库咋不告警?以mingW下使用winSocket为例MingW下网络编程的头文件分析该环境下链接的ws2_32库文件在哪里?mingW为啥可以兼容window下的动态库 概…...
C语言学习准备-编辑器选择
今天继续给大家更新C语言经典案例 今天的案例会比昨天稍微有一些难度,但是同时还是非常经典的案例 本来是想给大家继续更新C语言经典案例,但是有朋友反应C语言编辑器的选择,刚好我自己也是想更换一下C语言的编辑器,跟大家分享一下…...
微信为什么使用 SQLite 保存聊天记录?
概要 SQLite 是一个被大家低估的数据库,但有些人认为它是一个不适合生产环境使用的玩具数据库。事实上,SQLite 是一个非常可靠的数据库,它可以处理 TB 级的数据,但它没有网络层。接下来,本文将与大家共同探讨 SQLite 在…...
VB串口通讯方式解释
目前,Visual Basic (简称VB) 已成为WINDOWS 系统开发的主要语言,以其高效、简单易学及功能强大的特点越来越为广大程序设计人员及用户所青睐。VB 支持面向对象的程序设计,具有结构化的事件驱动编程模式并可以使用无限扩增的控件。在VB 应用程序中可以方便地调用WINDOWS API函数…...
Mybatis-Plus不能更新对象字段为空值问题解决
问题描述: 在使用Mybatis-Plus调用updateById方法进行数据更新默认情况下是不能更新空值字段的,而在实际开发过程中,往往会遇到需要将字段值更新为空值的情况,该如何解决呢? 原因分析: Mybatis-Plus中字…...
d3dx9_43.dll丢失怎么解决
d3dx9_43.dll丢失的影响 当我们在运行某些需要DirectX 9支持的程序时,如果系统中缺少d3dx9_43.dll文件,就会出现错误提示,导致程序无法正常启动。这个错误提示通常会类似于“找不到d3dx9_43.dll”或“d3dx9_43.dll不存在”。 打开电脑浏览器…...
【花雕】全国青少年机器人技术一级考试备考实操搭建手册8
随着科技的不断进步,机器人技术已经成为了一个重要的领域。在这个领域中,机械结构是机器人设计中至关重要的一部分,它决定了机器人的形态、运动方式和工作效率。对于青少年机器人爱好者来说,了解机械结构的基础知识,掌…...
【UE5 Cesium】09-Cesium for Unreal 子关卡应用实例(下)
效果 通过按钮点击事件实现子关卡的切换 步骤 新建两个Actor蓝图作为GeoMarker,分别命名为“BP_GeoMarker_BeiJing”、“BP_GeoMarker_ShangHai” 分别打开这两个蓝图,添加文本渲染组件 在指定的地理位置上拖入蓝图“BP_GeoMarker_BeiJing” 控制“BP_…...
插值应用案例2
案例1 高点和高程 在一丘陵地带测量高程,x和y方向每隔100m测一个点,得到高程如下表所列,试插值一曲面,确定合适的模型,并由此测到最高点和相应的高程。 x0/z0\y0 100 200 300 400 500 100 636 697 624 478 …...
【新星计划Linux】——常用命令(1)
作者简介:一名云计算网络运维人员、每天分享网络与运维的技术与干货。 座右铭:低头赶路,敬事如仪 个人主页:网络豆的主页 目录 前言 一.常用命令 1.Linux的基本原则: 用户接口: 2.命令形…...
python应用-excel和数据库的读取及写入操作
近日完成一个交办任务,从excel表读取数据,根据ID在数据库表匹配相应的记录,并回填至excel表里。我使用的工具是python。下面记录下相应的模块。 一、从excel表读取数据 import pandas as pd import numpy as npdef read_excel():path &quo…...
变量 varablie 声明- Rust 变量 let mut 声明与 C/C++ 变量声明对比分析
一、变量声明设计:let 与 mut 的哲学解析 Rust 采用 let 声明变量并通过 mut 显式标记可变性,这种设计体现了语言的核心哲学。以下是深度解析: 1.1 设计理念剖析 安全优先原则:默认不可变强制开发者明确声明意图 let x 5; …...
【SQL学习笔记1】增删改查+多表连接全解析(内附SQL免费在线练习工具)
可以使用Sqliteviz这个网站免费编写sql语句,它能够让用户直接在浏览器内练习SQL的语法,不需要安装任何软件。 链接如下: sqliteviz 注意: 在转写SQL语法时,关键字之间有一个特定的顺序,这个顺序会影响到…...
【Go】3、Go语言进阶与依赖管理
前言 本系列文章参考自稀土掘金上的 【字节内部课】公开课,做自我学习总结整理。 Go语言并发编程 Go语言原生支持并发编程,它的核心机制是 Goroutine 协程、Channel 通道,并基于CSP(Communicating Sequential Processes࿰…...
Python爬虫(一):爬虫伪装
一、网站防爬机制概述 在当今互联网环境中,具有一定规模或盈利性质的网站几乎都实施了各种防爬措施。这些措施主要分为两大类: 身份验证机制:直接将未经授权的爬虫阻挡在外反爬技术体系:通过各种技术手段增加爬虫获取数据的难度…...
【论文阅读28】-CNN-BiLSTM-Attention-(2024)
本文把滑坡位移序列拆开、筛优质因子,再用 CNN-BiLSTM-Attention 来动态预测每个子序列,最后重构出总位移,预测效果超越传统模型。 文章目录 1 引言2 方法2.1 位移时间序列加性模型2.2 变分模态分解 (VMD) 具体步骤2.3.1 样本熵(S…...
网络编程(UDP编程)
思维导图 UDP基础编程(单播) 1.流程图 服务器:短信的接收方 创建套接字 (socket)-----------------------------------------》有手机指定网络信息-----------------------------------------------》有号码绑定套接字 (bind)--------------…...
大学生职业发展与就业创业指导教学评价
这里是引用 作为软工2203/2204班的学生,我们非常感谢您在《大学生职业发展与就业创业指导》课程中的悉心教导。这门课程对我们即将面临实习和就业的工科学生来说至关重要,而您认真负责的教学态度,让课程的每一部分都充满了实用价值。 尤其让我…...
Maven 概述、安装、配置、仓库、私服详解
目录 1、Maven 概述 1.1 Maven 的定义 1.2 Maven 解决的问题 1.3 Maven 的核心特性与优势 2、Maven 安装 2.1 下载 Maven 2.2 安装配置 Maven 2.3 测试安装 2.4 修改 Maven 本地仓库的默认路径 3、Maven 配置 3.1 配置本地仓库 3.2 配置 JDK 3.3 IDEA 配置本地 Ma…...
html-<abbr> 缩写或首字母缩略词
定义与作用 <abbr> 标签用于表示缩写或首字母缩略词,它可以帮助用户更好地理解缩写的含义,尤其是对于那些不熟悉该缩写的用户。 title 属性的内容提供了缩写的详细说明。当用户将鼠标悬停在缩写上时,会显示一个提示框。 示例&#x…...
云原生玩法三问:构建自定义开发环境
云原生玩法三问:构建自定义开发环境 引言 临时运维一个古董项目,无文档,无环境,无交接人,俗称三无。 运行设备的环境老,本地环境版本高,ssh不过去。正好最近对 腾讯出品的云原生 cnb 感兴趣&…...
