设计模式学习笔记(一)如何评判代码质量的好坏?

2023-11-19

1.评判代码质量好坏的角度

在目前的面板项目中,经常听到同事用“代码写的很烂”、“这是什么鬼”、“我去,这个思路很棒啊”等字眼来评判项目中部分代码逻辑的好坏。

经过阅读一些文章和学习技术大神分享的内容,了解到真正评判代码好坏不应该笼统的用“好”、“烂”这种字眼。

从描述上应该更丰富、更专业、更细化。常用词汇有:

灵活性(flexibility)、可扩展性(extensibility)、可维护性(maintainability)、可
读性(readability)、可理解性(understandability)、易修改性(changeability)、
可复用(reusability)、可测试性(testability)、模块化(modularity)、高内聚低耦
合(high cohesion loose coupling)、高效(high effciency)、高性能(high
performance)、安全性(security)、兼容性(compatibility)、易用性
(usability)、整洁(clean)、清晰(clarity)、简单(simple)、直接
(straightforward)、少即是多(less code is more)、文档详尽(well
documented)、分层清晰(well-layered)、正确性(correctness、bug free)、健
壮性(robustness)、鲁棒性(robustness)、可用性(reliability)、可伸缩性
(scalability)、稳定性(stability)、优雅(elegant)、好(good)、坏(bad)
……
以上的词汇,对于代码评判的维度不同。比如,代码的可读性好、可扩展性好,就意味着代码的课维护性好。

2. 什么是好的代码

(1)可维护性(maintainability)

所谓“代码易维护”就是指,在不破坏原有代码设计、不引入新的 bug 的情况下,能够快速地修改或者添加代码。所谓“代码不易维护”就是指,修改或者添加代码需要冒着极大的引入新 bug 的风险,并且需要花费很长的时间才能完成。

代入我目前做的项目,那就是要做到bug容易修复,修改、添加功能能够轻松完成。如果做不到以上几点,那代码就是不易维护的。

在九月份之前,我们的项目代码是很难维护的,无论是新增功能还是修复bug,都要绕很大一圈,仅仅是持久层就用  mapper、dao、dto三层,如果想要新增一个对数据库的增删改操作,需要修改的java类超过6个。

而业务层是通过工作流的委托模式实现逻辑调用,存在的问题就是你在查bug的时候要去找到对应的那个service很麻烦。

(2)可读性(readability)

软件设计大师 Martin Fowler 曾经说过:“Any fool can write code that a computer

can understand. Good programmers write code that humans can understand.”翻

译成中文就是:“任何傻瓜都会编写计算机能理解的代码。好的程序员能够编写人能够理解

的代码。”

代码的可读性很重要,代码的开发周期不一定很长,但是维护周期一定很长。让同事能够轻松读懂你写的代码,才能说明你的代码的可读性很好。

我们的项目代码可读性有待商榷,之前的架构师、开发人员都是从C#转过来的,导致代码的底层架构和逻辑层采用的设计并不是很优美。

(3)可扩展性(extensibility)

可扩展性,可以让我们在不修改或者少量修改原有代码的情况下,通过扩展的方式添加新的功能代码。

目前项目对逻辑层的可扩展性做的比较好,逻辑层都是基于可扩展性去做的。

(4)灵活性(flexibiity)

灵活性,也可以用易复用来表示。主要体现在项目底层抽象出了很多可以复用的模块、类等代码,直接拿来用即可。

经过九月份的一次优化,目前项目的灵活性已经大大提升,新同事上手要减少百分之六十的学习成本。

(5) 简洁性(simplicity)

保持代码简单、逻辑清晰,意味着易读、易维护。开发不是炫技,搞太多花里胡哨的东西没什么必要。

所以,在能实现功能的基础上,对代码进行抽取、删减重复逻辑、配置管理基础数据等优化是很有必要的。

(6)可复用性(reusability)

可理解为,减少重复代码的编写,复用已有的代码。这点可以通过抽取公共的逻辑、抽象出接口、基于继承的多态类型转换等去做到。

目前项目对逻辑层相同的功能如:读取配置文件、上传下载文件、返回值的封装等逻辑进行封装,提供复用。

(7)可测试性(testabillity)

代码可测试性的好坏,能从侧面上非常准确地反应代码质量的好坏。代码的可测试性差,比较难写单元测试,那基本上就能说明代码设计得有问题

我们目前的项目还做不到这点,因为逻辑层的设计以及底层框架选择的问题,测试的成本依旧很高。

3. 总结

好的代码,应该是易维护、易读、易扩展、灵活、简洁、可复用、可测试的代码。要写出满足这些评价标准的高质量代码,我们需要掌握一些更加细化、更加能落地的编程方法论,包括面向对象设计思想、设计原则、设计模式、编码规范、重构技巧等。而所有这些编程方法论的最终目的都是为了编写出高质量的代码。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

设计模式学习笔记(一)如何评判代码质量的好坏? 的相关文章

随机推荐

  • sentinel3数据批量下载——sentinelsat

    本文主要记录利用sentinelsat包批量下载sentinel2数据 转载 https blog csdn net mrzhy1 article details 107044828 方法一 直接利用sentinelsat包 1 senti
  • 什么是单向数据流

    当父组件给子组件传递数据的时候 子组件只允许进行数据的读操作 不允许做数据的改操作 因为当子组件改变父组件传递过来的数据的话会造成数据流难以理解 简单分析一下 当子组件中更改了父级的内容时 其他需要引用父级组件也会被更改 从而导致父级组件在
  • python怎么算积分_python计算积分

    python有多个方法计算积分 下面介绍其中三个 以下式为例 方法一 直接用numpy计算 start 1 stop 2 length 101 x np linspace start stop length y x 2 result sum
  • Kotlin+Compose+MVVM模式(井字棋)

    井字棋 简单的演示一下MVVM模式结合Compose的运用 Compose 组合 1 Model 2 View activity fragment composable 3 ViewModel livedata gt stateOf 声明式
  • Qt框架及模块认识

    小白自工作就接触Qt 一直都在使用Qt5 3 1版本 所以没有经历过大牛们把项目从Qt4程序到Qt5的烦恼 没准以后会碰到 对Qt所有的丰富的API表示惊叹 对于Qt的框架及模块认识也是极为模糊的 文中有不对之处希望大牛们打脸 虽然脸都已经
  • AFX_MANAGE_STATE(AfxGetStaticModuleState())的使用

    MSDN By default MFC uses the resource handle of the main application to load the resource template If you have an export
  • jsp上显示JFreeChart生成的饼状图

    文件配置
  • UE4(Unreal Engine4)在蒙太奇动画中添加音频轨道通知

    UE4系列文章目录 文章目录 UE4系列文章目录 前言 一 遇到的问题 二 操作步骤 前言 UE4 Unreal Engine4 在蒙太奇动画中添加音频轨道通知 我们想在某一帧动画中添加声音 比如我们想在动画的第13帧这里添加音效 一 遇到
  • 对于单向链表的排序与去重

    include bits stdc h using namespace std struct node int num node next class Chain public Chain head tail new node void G
  • 【计算机科学】【2017】变分推理与深度学习

    本文为荷兰阿姆斯特丹大学 作者 Kingma D P 的博士论文 共174页 在本文中 我们提出了变分 贝叶斯 推理 生成建模 表示学习 半监督学习和随机优化问题的新的解决方案 我们提出了一种有效的变分推理算法 Kingmaand Well
  • 解析目标检测全流程!附代码数据

    关注后 星标 Datawhale 每日干货 每月组队学习 不错过 Datawhale干货 作者 王程伟 算法工程师 Datawhale成员 在计算机视觉中 红外弱小目标检测是一个重要的方向 但直到近一两年 才开始运用一些深度学习的方法 深度
  • 二叉树的递归遍历、非递归遍历、层次遍历

    1 递归遍历 2 非递归遍历 3 层次遍历 1 递归遍历 在使用递归遍历的时候 每个节点会经过三次 public class PreInPosTraversal public static class Node public int val
  • Java 基础--- Object Class

    Java 基础 Object Class Object Class 结构 toString clone finalize getClass equals Object obj hashCode 什么是hashcode hashcode的主要
  • 【MACOS(M1)编译Risc-v版OpenOCD】

    MACOS编译Risc v版OpenOCD 准备 1 执行顺序 常见问题 问题1 AC PROG CC C99 告警 2 问题2 texinfo 版本不匹配 问题2 libtool版本不匹配 问题3 编译错误 验证一下 准备1 Instal
  • document this 插件 mac_又一个折腰的 VSCode 插件

    1 最近这两周周末都在折腾 VSCode 白板插件 其主要原理是将 Excalidraw 1 嵌入到 VSCode 的 WebView 中 如果所有功能正常 那么相比于在 Web 中使用 在 VSCode 中将会更方便 截至目前 该插件的功
  • Power BI——SUMX函数(对列操作)

    1 语法 说明 第一个参数为被运算的表 table 第二个参数是对表中的每一行计算的表达式 2 步骤 SUMX 将迭代第一个参数中指定的表 一次一行 并完成第二个参数中指定的计算 3 案例 总销售额SUMX SUMX 销售表 销售表 数量
  • 【路径规划】基于A*算法和Dijkstra算法的路径规划(Python代码实现)

    个人主页 研学社的博客 欢迎来到本博客 博主优势 博客内容尽量做到思维缜密 逻辑清晰 为了方便读者 座右铭 行百里者 半于九十 本文目录如下 目录 1 概述 2 运行结果 3 参考文献 4 Python代码实现 1 概述 Dijkstr
  • 基于 tensorflow 的鲜花识别

    本文中 采用了卷积神经网络的深度学习方法来实现对鲜花种类的高精度识别 先是对原始图像进行预处理 然后是以LeNet 5 卷积神经网络模型为基础建立网络模型 再进行模型训练后得到鲜花识别分类器 最后分析实验结果并与其它花卉识别的算法进行对比
  • MySQL的JDBC操作入门案例 IDEA 实现

    package cn itcast jdbc import java sql public class JdbcDemo01 public static void main String args throws SQLException 1
  • 设计模式学习笔记(一)如何评判代码质量的好坏?

    1 评判代码质量好坏的角度 在目前的面板项目中 经常听到同事用 代码写的很烂 这是什么鬼 我去 这个思路很棒啊 等字眼来评判项目中部分代码逻辑的好坏 经过阅读一些文章和学习技术大神分享的内容 了解到真正评判代码好坏不应该笼统的用 好 烂 这