如何避免在C#中出现混乱代码

文章目录

一、溯源:混乱代码出现的原因

二、陷阱:混乱代码会使你焦头烂额

三、10招:避免出现混乱代码

四、写在最后:不与混乱代码纠缠


意大利面是一种很好吃的食物,但是,如果用它来形容代码意味着这种程序很糟糕。

“意大利面条式代码”是一个术语,用于描述组织不良、纠缠不清或嵌套复杂的代码。这些代码非常难以理解、更新、扩展和维护,缺乏适当组织,具有复杂或令人费解的控制流。这违反了软件设计原则。

无论你的代码如何天衣无缝,混乱代码都将或多或少地潜入你应用程序的源代码中。最终,你的代码将变得难以阅读、难以处理,从而难以添加新的功能、无法修复错误和维护代码库。

一、溯源:混乱代码出现的原因

那么,你的C#程序中为什么会出现混乱代码呢?这通常由以下原因导致:

1.未能遵循正确的方法和原则编写代码 

2.编写代码时没有组织代码的计划 

3.使用借来的代码

4.使用没有经验的开发人员编写的代码

从项目迭代到后期,往往会变得很混乱,只有少数人能知道某段代码的作用和该如何去改,或者是干脆谁都不知道,只能靠通过注释去猜测这段代码可能的作用。

因为团队内部人员变动导致撰写代码的人不再管理这段代码了。我们称这类代码为“祖传代码”,没人懂也没人敢动。祖传代码一多,开发人员再想迭代就难上加难,形成可怕的恶性循环。

二、陷阱:混乱代码会使你焦头烂额

混乱和无组织代码会给C#程序员带来麻烦,现在列举出来,看看你是否曾经遇到过这些情况:

  • 首先,它会为开发人员带来难以修复的bug或导致无法向程序中添加新的功能,还会导致试图更改C#代码的团队成员困惑不解。
  • 其次,由于算法效率低下或缺乏优化,混乱代码可能会导致应用程序性能降低、响应时间变慢、内存消耗增加,影响用户体验。
  • 最后就是安全问题,混乱代码中可能暗藏被黑客利用的漏洞

如果你的程序中出现了混乱代码,需要付出昂贵的成本修复。幸运的是,这些情况都是可以避免的。在文章的下半部分,我们将提供10个最佳方法,用来避免C#语言中出现混乱代码并保持程序整洁、组织良好和可维护。

三、10招:避免出现混乱代码

你需要遵循以下10种方法确保你的C#语言中代码干净、精简和易于维护。

方法一:坚持面向对象原则

您应该在C#语言的类和对象中封装数据和行为,并遵循“面向对象编程(OOP)”原则,如,继承、组合和多态性来创建模块化、可管理和有组织的代码。

方法二:坚持采用SOLID和DRY原则编程

首先来介绍下什么是SOLID和DRY原则:

SOLID原则:

(1)SRP(Single Responsibility Principle)单一职责

一个类或模块只负责完成一个功能。

(2)OCP(Open Closed Principle)开闭原则

(模块、类、方法)对拓展开放,对修改关闭

(3)LSP(Liskov Substitution Principle)里氏替换

子类对象能够替换程序中父类对象出现的任何地方,并保证原来程序的逻辑行为不变及正确性不被破坏。

(4)ISO(Interface Segregation Principle)接口隔离

客户端(接口调用者)不应该被强迫依赖它不需要的接口。

(5)DIP(Dependency Inversion Principle)依赖倒置/依赖反转

高层模块不依赖低层模块,它们共同依赖同一个抽象,抽象不要依赖具体实现细节,具体实现细节依赖抽象。

DRY(Don’t Repeat Yourself)原则:

不要开发重复代码,可以复用或提取公共代码,同时,也要注意遵守“单一职责”和“接口隔离”原则。

总之,构建遵循“SOLID和DRY”原则的软件可以将出现混乱代码的相关风险降至最低。

  • 这里特殊说明下,根据“单一职责原则”(五个SOLID原则之一),每类程序或方法只需要具备一个职责。例如,应用程序中的Logger类代码只需要负责记录数据,而不应该包含其它功能。
  • 当具有复杂功能的程序被分解成更小、更集中的组件时,就更容易理解和维护它们。“DRY原则”可以将公共函数抽象为可重复使用的方法、类和库,从而减少出现重复的代码。

方法三:保持清晰和集中的步骤

将复杂的任务分解为可管理的步骤,可以使你的代码更易于阅读和理解。这也减少了代码的冗余并提高了代码的可维护性。

方法四:使用有意义的名称

通过遵守编码标准和风格指南有利于让你的代码库保持整齐,确保变量、类、方法和其它元素都能匹配上有意义的描述性名称。这些名称使你的代码更容易理解,从而减少注释并使维护代码变得更容易。

方法五:降低圈复杂度

“圈复杂度”用来确定源代码中线性独立路径数量,可以帮助你理解代码复杂性。过多的if-else语句和深度嵌套使代码难以理解并增加了圈复杂度。你可以通过重构代码减少嵌套级别并简化分支逻辑。

方法六:代码中少用注释

6代码中应该包含注释,用来解释类、接口、方法和属性出现的目的,使代码更容易管理、维护和调试。但是,文档需要更加清晰。清晰的名称和更简单的代码(即,圈复杂度更低的代码)使代码更容易理解,并不一定需要出现太多的注释。

方法七:定期重构代码

删除代码冗余或重复,简化复杂的代码片段,并通过定期重构提高代码质量。通过改进代码的设计和结构,重构使代码库随着时间的推移更容易维护。

方法八:KISS和YAGNI原则简化代码

KISS原则是英语Keep It Simple的缩写,也有人称“懒人原则”,是指在设计当中应当注重简约。

你可以将KISS原则应用于编程,用来构建最简单的框架,满足用户需求并避免不必要的复杂性。当你的应用程序中包含不必要的特性和代码时,它不仅会使单元测试和代码维护变得困难,而且还会影响用户体验。

YAGNI原则的英文全称是:You Ain’t Gonna Need It。直译就是:你不会需要它。当用在软件开发中的时候,它的意思是:不要去设计当前用不到的功能,不要去编写当前用不到的代码。

类似的,你可以遵循YAGNI原则清除不重要的功能和代码。你应该只关注需要的功能,避免为追求完美而给代码“镀金”。

方法九:经常运行单元测试

你应该在软件开发工作流程中充分利用单元测试工具,减少应用程序中的错误。单元测试有助于确保代码单元按照预期运行。如果你已经更改或重构了代码,应该再次运行单元测试功能,用来确保一切工作正常进行。

方法十:进行代码审查

进行代码审查可以让你深入了解代码并获得反馈。同行评审代码使你和团队成员有机会识别混乱代码并收集改进建议。同行评审可以帮助你的团队避免编写混乱代码并付诸实践。

四、写在最后:不与混乱代码纠缠

总之,混乱代码错综复杂,就像一盘纠缠在一起的面条。如果你要清理它,最好从小处开始并不断改进代码。通过遵循本文中概述的10个指导方针,你可以避免应用程序中出现混乱代码,并为团队成员节省大量时间、精力和避免麻烦。

参考资料:

How to avoid spaghetti code in C# | InfoWorld

https://blog.51cto.com/wenwang3000/6037099

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/41878.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

伙伴云CEO戴志康:我们为什么要做伙伴云?

分享嘉宾:戴志康,伙伴云CEO 以下为演讲实录⬇⬇⬇ 01选择人更少的一条路,从B级走向A级 我一直想和大家交流一个话题,关于我们为什么要做伙伴云。既代表我自己,同时也代表我们团队的一些想法。 我是一个怀疑论者。大…

centos7.6下安装mysql

1.下载yum源: wget https://dev.mysql.com/get/mysql80-community-release-el7-5.noarch.rpm2.执行安装: rpm -ivh mysql80-community-release-el7-5.noarch.rpm3.开始安装 yum install -y mysql-server4.启动mysql服务 systemctl start mysqld5.查看…

Docker 应用容器引擎

Docker 应用容器引擎 一、Docker是什么二、Docker安装和查看1、docker安装2、docker版本信息查看3、docker信息查看 三、镜像操作四、容器操作1、容器创建2、创建并启动容器3、容器的进入4、复制5、容器的导入和导出6、删除容器 一、Docker是什么 是一个开源的应用容器引擎&…

【自监督预训练 2023】MCL

【自监督预训练 2023】MCL 论文题目:Multi-Level Contrastive Learning for Dense Prediction Task 中文题目:稠密预测任务的多级对比学习 论文链接:https://arxiv.org/abs/2304.02010 论文代码:https://github.com/GuoQiushan/MC…

i.MX6Q应用处理器:MCIMX6Q5EYM12AD/MCIMX6Q5EYM10AE/MCIMX6Q5EYM10ADR 4核、32位,624-LFBGA

i.MX6Q 处理器代表了集成多媒体应用处理器的最新成就。这些处理器是不断增长的多媒体产品系列的一部分,这些产品提供高性能处理,并针对最低功耗进行了优化。 i.MX6Quad处理器采用先进的四核ArmCortex-A9内核,运行速度高达1.2 GHz。它们包括2…

浏览器打开PDF标题乱码

问题 使用 itext5 用pdf模板生成预览pdf乱码问题 解决办法 使用pdf编辑器打开之后,选择 文件>> 属性, 修改乱码的标题。

ENSP实验一:防火墙基础配置

1、搭建拓扑图 配置client&#xff08;内网&#xff09;、FTP Server&#xff08;外网&#xff09;的IP地址 客户端设置&#xff1a; 服务端设置&#xff1a; 2、配置防火墙命名 进入防火墙&#xff0c;输入密码&#xff1a;默认为admin123 <USG6000V1>system-view /…

linux 安装pytorch3d的坑

事实上&#xff0c;只要按照官方文档的说明就可以完美安装。其中坑的地方在于conda的管理可能会导致下载的版本不符合你的要求&#xff08;例如下载成了cpu版本、下载的cuda版本&#xff09;而同样尝试使用源码编译以及其他方式下载库都会导致同样的问题&#xff0c;这里主要的…

Centos 7 使用国内镜像源更新内核

内核选择参考 此博文 &#xff1a;https://blog.csdn.net/alwaysbefine/article/details/108931626 elrepo官网介绍的内核升级方式为&#xff1a; 一、按文档执行引入 elrepo库&#xff1b; # 1、引入公钥 rpm --import https://www.elrepo.org/RPM-GPG-KEY-elrepo.org# 2、安…

回归预测 | MATLAB实现基于SVM-Adaboost支持向量机结合AdaBoost多输入单输出回归预测

回归预测 | MATLAB实现基于SVM-Adaboost支持向量机结合AdaBoost多输入单输出回归预测 目录 回归预测 | MATLAB实现基于SVM-Adaboost支持向量机结合AdaBoost多输入单输出回归预测预测效果基本介绍模型描述程序设计参考资料 预测效果 基本介绍 1.MATLAB实现基于SVM-Adaboost支持向…

left join 和except方法区别和联系

目录 相同点&#xff1a; left join except 不同点 假设有两个表&#xff1a;A客户表 和 B客户表&#xff0c;客户uid是唯一主键 相同点&#xff1a; 查询在A中的客户 但不在B中&#xff0c;也就是图中的阴影部分&#xff0c;left join 和except方法都可以实现 left join …

torch分布式通信基础

torch分布式通信基础 1. 点到点通信2. 集群通信 官网文档&#xff1a;WRITING DISTRIBUTED APPLICATIONS WITH PYTORCH 1. 点到点通信 # 同步&#xff0c;peer-2-peer数据传递 import os import torch import torch.distributed as dist import torch.multiprocessing as mpdef…

CSS:给子元素设置了浮动,页面缩放的时候,子元素往下掉

前言 给子元素设置了浮动&#xff0c;页面缩放的时候&#xff0c;子元素往下掉 html代码&#xff1a; <div class"father"><div class"child1"></div><div class"child2"></div> </div>css代码 .child1…

动态内存管理(C语言)

动态内存管理 1. 为什么存在动态内存管理2. 动态内存函数的介绍2.1 malloc函数和free函数2.2 calloc函数2.3 realloc函数 3. 常见的动态内存错误3.1 对NULL指针的解引用操作3.2 对动态开辟空间的越界访问3.3 对非动态开辟内存使用free函数3.4 使用free释放动态开辟内存的一部分…

旅游卡小程序软件招商加盟代理

旅游卡小程序软件招商加盟代理 我国人民生活水平的提高&#xff0c;旅游业成为了人们生活中必不可少的一部分。旅游卡小程序软件作为旅游行业的重要组成部分&#xff0c;也日益受到人们的关注。如今&#xff0c;旅游卡小程序软件招商加盟代理已经成为了一个热门的投资创业项…

详解c++---特殊类设计

目录标题 设计一个不能被拷贝的类设计一个只能从堆上创建对象的类设计一个只能在栈上创建对象的类设计一个无法被继承的类什么是单例模式饿汉模式饿汉模式的缺点懒汉模式懒汉模式的优点懒汉模式的缺点特殊的懒汉 设计一个不能被拷贝的类 拷贝只会放生在两个场景中&#xff1a;…

Jmeter+Maven+jenkins+eclipse搭建自动化测试平台

背景&#xff1a; 首先用jmeter录制或者书写性能测试的脚本&#xff0c;用maven添加相关依赖&#xff0c;把性能测试的代码提交到github&#xff0c;在jenkins配置git下载性能测试的代码&#xff0c;配置运行脚本和测试报告&#xff0c;配置运行失败自动发邮件通知&#xff0c…

Go-新手速成-流程语句

1if Go的if不建议写&#xff08;&#xff09;&#xff0c;over //if条件判断age : 16if age < 18 {fmt.Println("未成年")} 2for循环 Go摈弃了while和do while 循环&#xff0c;因为他做到了极简(也不要括号) 这么写可以 total : 0for i : 0; i < 100; i {…

Goby 漏洞发布|天擎终端安全管理系统 YII_CSRF_TOKEN 远程代码执行漏洞

漏洞名称&#xff1a;天擎终端安全管理系统 YII_CSRF_TOKEN 远程代码执行漏洞 English Name&#xff1a;Tianqing terminal security management system YII_CSRF_TOKEN remote code execution vulnerability CVSS core: 9.8 影响资产数&#xff1a;875 漏洞描述&#xff1…

2023婴幼儿奶粉市场数据分析(天猫数据中心)

我国婴幼儿奶粉市场一直保持着相当大的规模&#xff0c;虽然近几年新生人口数量不断下降&#xff0c;但伴随消费者的消费升级不断加速、大龄孩童吃奶粉的时间延长等&#xff0c;整体来看&#xff0c;婴幼儿奶粉行业市场规模保持平稳。 根据鲸参谋电商数据分析平台的相关数据显示…