代码整洁之道(Clean Code)- 读书笔记

640?wx_fmt=gif

Sorry, 许久未更新文章了,主要因为刚刚换了一家新公司,忙于组建团队(建设、招聘、流程、框架等)与熟悉公司业务,还有领导给的其他工作等等,实在是没有时间更新了。最近在和团队分享Bob大叔的《Clean Code》,于是整理了一些笔记,与各位分享。


一、关于Bob大叔的Clean Code

  《代码整洁之道》主要讲述了一系列行之有效的整洁代码操作实践。软件质量,不但依赖于架构及项目管理,而且与代码质量紧密相关。这一点,无论是敏捷开发流派还是传统开发流派,都不得不承认。这本书的阅读对象为一切有志于改善代码质量的程序员,书中介绍的规则均来自作者Bob大叔多年的实践经验,涵盖从命名到重构的多个编程方面,虽为一“家”之言,然诚有可资借鉴的价值。

  最让我感受深刻的是封面图片和副标题,首先是封面图片:

  640?wx_fmt=jpeg

  上面这张图是M104:草帽星系,其核心是一个质量超大的黑洞,有100万个太阳那么重,环绕着M104的光环就像一顶墨西哥草帽,仿佛经历了大爆炸之后碎片四溅的产物。联系到我们所经历过的没由整洁代码风格各异不可维护的软件项目,其实当你接手时之前的代码都是一个个的黑洞,存在着某天会定时爆发的风险,而当它真正爆发时,接手这个项目的所有人都会因此遭殃。

  其次,再说说副标题:“细节之中自有天地,整洁成就卓越代码”。本书讲述的就是一个又一个的细节之处,不好的处理和好的处理都一一道来,让我们形成整洁的规范。

Robert C. Martin,(Bob大叔)自1970年进入软件行业,从1990年起成为国际软件咨询师。是软件工程领域的大师级人物,是《敏捷软件开发:原则、模式与实践》、《敏捷软件开发:原则、模式与实践(C#版)》(邮电)、《极限编程实践》(邮电)等国内引进的畅销书的作者,其中第一本原著荣获美国《软件开发》第13届震撼(Jolt)大奖,Martin的敏捷系列书是软件工程界的权威书籍。

二、Clean Code精华笔记

文不如表,表不如图,奉上一张思维导图:

640?wx_fmt=png

三、.NET平台的代码规范插件使用

3.1 StyleCop.Analyzers介绍

  StyleCop.Analyzers是一个开源的代码风格规则的审查项目,其github地址为:https://github.com/DotNetAnalyzers/StyleCopAnalyzers,用于.NET编译器平台的StyleCop分析器,该存储库包含使用.NET编译器平台的StyleCop规则的实现。 在可能的情况下,还会提供代码修复以简化纠正违规的过程。

  它具有以下几个好处:

  • 可以支持 C# 6

  • 使用 Roslyn 解析器,减少了自定义解析器的性能消耗

  • 当你写代码的时候解析器就会运行,当你编译的时候也会运行(不需要再设置 msbuild 任务或者安装任何 vs 插件)

  最近我们团队就采用了StyleCop.Analyzers作为代码审查插件,并将重要的规则设定为了Error级别,即如果你不改正编译不会通过。其实,Resharper也是一款不错的工具,但是因为其收费和重量级的特性,被我放弃了。

3.2 StyleCop.Analyzers安装

  为需要进行代码风格审查的.NET项目Nuget上直接搜索:StyleCop.Analyzers即可,目前最新版本为1.0.2.

  640?wx_fmt=png

3.3 设置规则列表

  这里我分享一个我们团队筛选过后的Ruleset文件(点我下载),它将作为StyleCop.Analyzers的分析基准,我一般将其放在解决方案的Solution Items中,即解决方案层级中(和Dockerfile类似放在项目层级中)

  640?wx_fmt=png

3.4 编辑具体项目的项目文件(csproj)

  为每个需要进行代码风格/规则审查的项目指定需要基准的Ruleset文件:(通过编辑项目文件)

  640?wx_fmt=png

3.5 测试代码风格检查

  写了一些代码之后,编译,查看错误信息窗口:

  640?wx_fmt=png

  可以看到未满足代码规则的点都被检查出来,只有改正之后才可以编译通过。

  最后,再次回顾一下《代码整洁之道》的副标题:

“细节之中自有天地,整洁成就卓越代码”  

参考资料

  Robert C.Martin著,《代码整洁之道》

  640?wx_fmt=jpeg

  soulless,  《C# 代码规范和质量检查工具 StyleCop.Analyzers

  DotNetAnalyzers,《Using StyleCop Analyzers with .NET Core


640?wx_fmt=jpeg


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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

微软Build 2019大会.NET课程视频汇总

点击上方蓝字关注“汪宇杰博客”5月6日至8日,微软在西雅图召开了Build 2019开发者大会。我们关注的.NET领域也迎来了许多激动人心的改进。本文汇总了Build 2019大会上关于.NET的已经公开的视频,欢迎大家观看学习!// 注意:以下视频…

黑科技抢先尝 | Windows全新终端初体验(附代码Build全过程)

微软在几天前的build大会上展示了Windows Terminal的威力,由于官宣要在6月中旬才上Microsoft store,还有一个多月要等呢。好在代码已公布在 github, 于是决定自己 build 后体验一番。遇到不少坑,大概整理一下流程,分享给大家。如果…

aelf帮助C#工程师10分钟零门槛搭建DAPP私有链开发环境

aelf是一个可扩展的去中心化云计算区块链平台,支持高性能合约并行执行、原生多链数据交互、存储使用高性能分布式数据库。aelf整个系统可以在windows、osx及linux运行,团队在osx环境下开发,基于.net core DAPP开发1.安装.net core及protobufh…

Build 2019 上微软的开源动作有点不一样

微软今年举办的 Build 开发者大会可谓是抢足风头,大会第一天就放了不少大招:宣布新的命令行终端 Windows Terminal、Windows 10 的 Linux 子系统 WSL 2 将运行真正的 Linux 内核、跳过 .NET 4 宣布 .NET 5 的计划、宣布 Web 版本的 VS Code (Visual Stud…

P1437 [HNOI2004]敲砖块

P1437 [HNOI2004]敲砖块 题意: 在一个凹槽中放置了 n 层砖块、最上面的一层有 n 块砖,从上到下每层依次减少一块砖。每块砖都有一个分值,敲掉这块砖就能得到相应的分值,如下图所示: 14 15 4 3 2333 33 76 22 …

在kubernetes 集群内访问k8s API服务

所有的 kubernetes 集群中账户分为两类,Kubernetes 管理的 serviceaccount(服务账户) 和 useraccount(用户账户)。基于角色的访问控制(“RBAC”)使用“rbac.authorization.k8s.io”API 组来实现授权控制,允…

.NET Core之只是多看了你一眼

技术学习是一件系统性的事情,如果拒绝学习,那么自己就会落后以至于被替代。.NET也是一样,当开源、跨平台成为主流的时候,如果再故步自封,等待.NET的就是死路一条,幸好.NET Core问世了,社区反响积…

TOTP 介绍及基于 C# 的简单实现

TOTP 介绍及基于 C# 的简单实现IntroTOTP 是基于时间的一次性密码生成算法,它由 RFC 6238 定义。和基于事件的一次性密码生成算法不同 HOTP,TOTP 是基于时间的,它和 HOTP 具有如下关系:TOTP HOTP(K, T)HOTP(K,C) Truncate(HMAC-…

微软携手红帽,共筑开源新未来

官宣了,官宣了!微软携手红帽正式推出重要力作Global Azure 公有云第一款联合管理的 OpenShift 产品,业界欢腾!自此,微软在拥抱云计算开源之路上,多了一股强劲的推动力。5月初刚刚举办的全球 Red Hat Summit…

.NET Core 3.0之深入源码理解Startup的注册及运行

开发.NET Core应用,直接映入眼帘的就是Startup类和Program类,它们是.NET Core应用程序的起点。通过使用Startup,可以配置化处理所有向应用程序所做的请求的管道,同时也可以减少.NET应用程序对单一服务器的依赖性,使我们…

置换群,Polya引理和burnside引理(等价类计数问题)

参考文章: 等价类计数问题 Burnside引理&Plya定理 Burnside引理与Polya定理 置换群和Burnside引理,Polya定理 概念引入: 离散数学应该学过置换群的相关概念,置换本质就是映射,可以理解成一个正方形绕其中心逆时针…

时隔两年的重大更新,微软发布.NET Framework 4.8

微软发布了.NET Framework 4.8,这是两年来.NET 框架的第一个重大更新。新版本包含多个产品领域的改进,其中包括 Windows 窗体、WCF、WorkFlow 和 WPF。它还在基类库(BCL)和通用语言运行时(CLR)中有一些更新…

EventStore文件存储设计

背景ENode是一个CQRSEvent Sourcing架构的开发框架,Event Sourcing需要持久化事件,事件可以持久化在DB,但是DB由于面向的是CRUD场景,是针对数据会不断修改或删除的场景,所以内部实现会比较复杂,性能也相对比…

.NET Core 如何禁止.resx文件自动生成Designer.cs

点击上方蓝字关注“汪宇杰博客”在 Visual Studio 中,如果我们在一个 .NET Core 工程里加入了一个资源文件(.resx),那么你会发现有个对应的 .Designer.cs 文件被自动生成了,每次资源文件的内容有变化,这个设…

P1450 [HAOI2008]硬币购物

P1450 [HAOI2008]硬币购物 题意: 共有 4 种硬币。面值分别为c1,c2,c3,c4c_1,c_2,c_3,c_4c1​,c2​,c3​,c4​。 某人去商店买东西,去了 n 次,对于每次购买,他带了 did_idi​枚 i 种硬币,想购买 s 的价值的东西。请问…

.net core百万设备连接服务和硬件需求测试

随着物联网的普及,服务应用将面对大量物联设备处理;早期.NET在通讯上的处理能力一直给人的印像并不怎样,但net core经历过大量的优化后在各个模块的处理性能都有着比较出色的提升,针对网络方向的处理模块也有着显著的提升。以下主…

字符串匹配(多模式匹配篇)

字符串匹配(多模式匹配篇)摘要:问题的提出:众所周知,KMP算法在O(n)的时间中solve单模式串匹配问题。但怎样solve多模式串匹配问题呢?Solve:本文用简要记叙了使用trie树&a…

.net core编写转发服务

我有个小伙伴问我,他需要写一个转发服务的他有很多功能要通过他的服务转发~技术栈又不一定asp.net core,我就想起泥水老前辈的BeetleX.FastHttpApi中午午休,折腾了一会儿前辈,问清楚了FastHttpApi如何配置控制器依赖注入和控制器的…

数据结构(终极线段树篇)

数据结构(终极线段树篇) 摘要: 问题的提出:如何解决多样化的区间操作问题? solve:线段树!!! 关键字: 线段树,可持久化线段树,权值线段…

.NET Core 3.0之深入源码理解Configuration(一)

微软在.NET Core里设计出了全新的配置体系,并以非常灵活、可扩展的方式实现。从其源码来看,其运行机制大致是,根据其Source,创建一个Builder实例,并会向其添加Provider,在我们使用配置信息的时候&#xff0…