珠海网站建设 超凡科技百度识图 上传图片

张小明 2025/12/28 20:51:55
珠海网站建设 超凡科技,百度识图 上传图片,哪些国家网站无须备案,河北网站推广公司前言#xff1a;推荐大家阅读 Martin Fowler的《重构——改善既有代码的设计》第2版。本文谈一谈本人阅读几章节之后的一点理解。 目录 一、什么是重构 二、为何需要重构 1#xff09;使代码易于理解 2#xff09;使代码便于扩展维护 3#xff09;使代码不易变质 三、…前言推荐大家阅读 Martin Fowler的《重构——改善既有代码的设计》第2版。本文谈一谈本人阅读几章节之后的一点理解。目录一、什么是重构二、为何需要重构1使代码易于理解2使代码便于扩展维护3使代码不易变质三、何时需要重构四、重构的前提五、重构的常用方法1提取重复代码为函数2优化命名3简化复杂条件判断4拆分高耦合类六、重构与性能优化的关系一、什么是重构重构的是指在不改变代码外部行为的前提下优化内部结构让代码更易维护、扩展和理解。二、为何需要重构1使代码易于理解可能是为了节省时间很多开发者没有写注释的习惯。在复杂的庞大系统编程中重构告诉我们 需要为复杂函数写清楚注释便于后面新人快速接手。2使代码便于扩展维护我们平时开发项目时由于项目周期较短资源紧张等客观因素使得我们的开发只关注功能的实现与完成可能中间出现了重复代码、无用代码、危险的指针等。当有新的需求或是修改bug可能都在原有代码结构中直接进行修改使得代码堆砌变得杂乱难以扩展维护3使代码不易变质有一个经典的”破窗理论“即如果一扇窗户破了如果你不及时去修补时间长了经过的路人可能认为这里一直是个破烂的地方可以丢垃圾而后很多人在这里附近丢垃圾导致成了垃圾堆。代码也是一样如果不及时重构那么就会变成垃圾堆积如山慢慢变质。三、何时需要重构代码出现“坏味道”的时候可能就需要重构了。“坏味道”包括 变量/函数命名不清晰、耦合度高、大量的裸指针、条件分支过于复杂等。事不过三三则重构如果你第一次改一处代码觉得可以下手第二次修改勉强可以下手第三次难以下手那么这就提醒你是时候需要进行重构了。四、重构的前提想要重构必须得先有可以自测试的代码。用书中的观点便是重构的第一块基石是自测试代码。前面说过重构是在不改变代码外部行为的前提下进行的那如何才能保证不改变代码外部行为呢答案是只能通过自测试。因此在没有自测试代码之前不能随意开始重构。五、重构的常用方法1提取重复代码为函数避免重复造轮子将公有部分提炼成函数。重构前#include iostream #include cmath using namespace std; int main() { // 计算圆1的面积和周长 double r1 5.0; double area1 M_PI * r1 * r1; double circumference1 2 * M_PI * r1; cout 圆1面积 area1 周长 circumference1 endl; // 计算圆2的面积和周长重复代码 double r2 8.0; double area2 M_PI * r2 * r2; double circumference2 2 * M_PI * r2; cout 圆2面积 area2 周长 circumference2 endl; return 0; }重构后#include iostream #include cmath using namespace std; // 提取重复逻辑为函数复用性提升 double calculateCircleArea(double radius) { return M_PI * radius * radius; } double calculateCircleCircumference(double radius) { return 2 * M_PI * radius; } int main() { double r1 5.0; cout 圆1面积 calculateCircleArea(r1) 周长 calculateCircleCircumference(r1) endl; double r2 8.0; cout 圆2面积 calculateCircleArea(r2) 周长 calculateCircleCircumference(r2) endl; return 0; }2优化命名清晰的命名能够显著提高代码的可读性。重构前#include iostream using namespace std; // 函数名模糊参数名无意义 int f1(int a, int b) { int c a * b; // c的含义不明确 if (c 100) { return c - 10; } else { return c; } } int main() { int x 15; int y 8; cout f1(x, y) endl; // 不知道f1是做什么的 return 0; }重构后#include iostream using namespace std; // 函数名参数名语义化一眼能懂功能 int calculateDiscountedProductTotal(int unitPrice, int quantity) { int totalPrice unitPrice * quantity; // 超过100减10的逻辑明确标注 if (totalPrice 100) { return totalPrice - 10; } else { return totalPrice; } } int main() { int phonePrice 15; int buyCount 8; cout calculateDiscountedProductTotal(phonePrice, buyCount) endl; return 0; }3简化复杂条件判断重构前#include iostream #include string using namespace std; bool canLogin(string username, string password, int age, bool isVerified) { // 条件表达式冗长逻辑不清晰 if (username ! password.length() 6 age 18 isVerified true) { return true; } else { return false; } } int main() { cout boolalpha canLogin(zhangsan, 123456, 20, true) endl; return 0; }重构后#include iostream #include string using namespace std; // 提取子条件为语义化函数简化主逻辑 bool isUsernameValid(string username) { return !username.empty(); } bool isPasswordValid(string password) { return password.length() 6; } bool isAdult(int age) { return age 18; } bool canLogin(string username, string password, int age, bool isVerified) { // 条件逻辑清晰一眼能懂判断维度 return isUsernameValid(username) isPasswordValid(password) isAdult(age) isVerified; } int main() { cout boolalpha canLogin(zhangsan, 123456, 20, true) endl; return 0; }4拆分高耦合类如一个类同时处理网络请求、数据解析、日志打印。重构前#include iostream #include string // 高耦合一个类承担多个职责 class UserService { public: void getUserInfo(const std::string userId) { // 1. 网络请求职责1 std::string rawData userId userId namezhangsanage20; std::cout 发送网络请求获取原始数据 rawData std::endl; // 2. 数据解析职责2 std::string name zhangsan; int age 20; // 3. 日志打印职责3 std::cout [LOG] 解析用户信息name name , age age std::endl; // 4. 业务逻辑 std::cout 用户信息 name ( age 岁) std::endl; } }; int main() { UserService service; service.getUserInfo(1001); return 0; }重构后#include iostream #include string // 职责1网络请求 class NetworkClient { public: std::string requestUserRawData(const std::string userId) { std::string rawData userId userId namezhangsanage20; std::cout 发送网络请求获取原始数据 rawData std::endl; return rawData; } }; // 职责2数据解析 class UserDataParser { public: struct UserInfo { std::string name; int age; }; UserInfo parse(const std::string rawData) { // 简化解析逻辑实际可使用正则/字符串分割 return {zhangsan, 20}; } }; // 职责3日志打印 class Logger { public: static void printUserLog(const UserDataParser::UserInfo info) { std::cout [LOG] 解析用户信息name info.name , age info.age std::endl; } }; // 职责4业务逻辑依赖其他类但耦合度低 class UserService { private: NetworkClient networkClient; UserDataParser parser; public: void getUserInfo(const std::string userId) { std::string rawData networkClient.requestUserRawData(userId); UserDataParser::UserInfo info parser.parse(rawData); Logger::printUserLog(info); std::cout 用户信息 info.name ( info.age 岁) std::endl; } }; int main() { UserService service; service.getUserInfo(1001); return 0; }六、重构与性能优化的关系有部分开发者可能认为重构一定是性能优化的其实不然。重构的首要目标不是提升性能但良好的重构会让性能优化更易实现。结束语以上仅是个人对重构的一些理解。文中提到的重构手法只列举了一些简单常见的欢迎读者根据自身项目经验在评论区补充留言。
版权声明:本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!

建设网站的成本如何设计网店店面

Mermaid在线编辑器:5分钟掌握专业图表制作技巧 【免费下载链接】mermaid-live-editor Location has moved to https://github.com/mermaid-js/mermaid-live-editor 项目地址: https://gitcode.com/gh_mirrors/mer/mermaid-live-editor 还在为复杂的技术文档配…

张小明 2025/12/24 0:49:22 网站建设

有没有外国网站可以做兼职翻译的网站的空间与域名

Linux 用户与组管理全解析 1. /etc/group 文件详解 在 Linux 系统中, /etc/group 文件用于存储组信息,其包含以下几个重要字段: - 组名(Group name) :这是 /etc/group 文件中的第一个字段,例如前面例子中的 users 就是组的名称。在大多数访问或操作组数据的命…

张小明 2025/12/24 0:49:21 网站建设

北京学做网站天河建设网站平台

为什么Langchain-Chatchat成为本地知识库问答标杆? 在企业知识管理日益复杂的今天,一个看似简单的问题却常常难倒整个团队:“我们去年的差旅报销标准到底是多少?”——文档散落在各个共享文件夹、邮件附件和旧版制度手册中&#…

张小明 2025/12/24 0:49:19 网站建设

网站代码在哪里修改厦门seo优化外包公司

快速体验 打开 InsCode(快马)平台 https://www.inscode.net输入框内输入如下内容: 构建一个项目效率对比工具,能够并行运行传统开发流程和AI辅助流程,实时显示两者在代码生成、测试、部署等环节的时间差异和产出质量对比。工具应支持自定义项…

张小明 2025/12/24 0:49:17 网站建设

ie浏览器打开建设银行网站三亚网站定制开发公司

论文链接:https://arxiv.org/pdf/2512.08765 项目链接:https://github.com/ali-vilab/Wan-Move亮点直击Wan-Move,一个用于图像到视频生成中运动控制的框架。与需要运动编码的现有方法不同,它通过编辑条件特征注入运动引导,无需添加…

张小明 2025/12/22 19:02:58 网站建设

营销型网站维护费用网站优化工具升上去

使用 Qwen3-32B 实现复杂推理:从原理到工程落地的深度实践 在当前 AI 系统日益深入企业核心业务的背景下,模型能否真正“思考”,而不仅仅是“续写”,已成为衡量其价值的关键标准。我们不再满足于让大模型回答“什么是牛顿第二定律…

张小明 2025/12/22 19:01:57 网站建设