当前位置: 首页 > news >正文

重构(二)

继续"提高代码质量"

接着上文提高代码质量, 需要从这几个特点入手

1、代码重用性。2、可读性。3、可扩展性。4、可靠性。5、高内聚,低耦合。

仅仅就"可读性"去分析一下吧, 毕竟例子实在是太多了

递归的"可读性"不如while循环

递归的可读性很差, 虽然短小的递归也能读懂, 但是能用while循环去写程序, 更容易理解

观察者模式导致"可读性"更差

如果两个对象能直接调用就直接调用, 如果非要使用观察者模式监听另外一个对象, 就是给自己找麻烦. 有时候观察者模式能实现解耦的功能和监听的功能, 除此以外, 不同模块之间使用观察者模式通信, 让可读性更差. 典型的模块间使用观察者的例子有, 广播通信, Eventbus, LiveData. 如果模块之间能直接调用, 还要借助平台工具, 一定要有必要的理由.

日志打印可读性

我日志一般这种方式打印

Log.d(“ClassName”, “methodName paramName: $paramName”)

结合过往经验, 这样打印根据日志调查问题会更轻松. 一目了然.
高频的日志要用verbose级别去打印, 也就是Log.v(), 这样方便开发者过滤掉高频日志, 只看d级别以上的, 开发者尽量不用Log.e()去打印, 因为这会让日志爆红, 不方便查看系统的重要日志, 开放给开发者的最好是用debug info级别的, warn和assert不用也没关系
当然真养成这样的习惯, 看别人的代码和日志会感觉别扭, 尽量"严以律己, 宽以待人", 毕竟大家都是混口饭吃, 谁都不是老板

typo问题的可读性

集成开发环境通常会提示拼写错误, 如果确定是"专属名词"也可以让IDE避免提示, 经常为了提高效率而选择粗略的根据命名搜索过滤, 这样有可能忽略掉有些代码. typo问题已经是很低级的问题了, 因为编译器会提醒

重构本身就需要有能区别好坏代码的能力

罗翔曾经说"希望自己的孩子有分清什么是Good的能力", 他没有说"好", 而是用"Good"也就是说, 他眼中的Good不是传统意义的好.
软件程序常常讲"最佳实践", 这就是Good. 通常不会为一个可能半年就会改掉的类精心设计, 因为精心设计一个临时的类反而不是最佳实践.
区分Good和不Good是要有"评价能力", 评价本身会得罪人, 评价又属于较真的一类行为. 所以在不较真的中国文化, 这个话题不能和人聊. 记得很久以前和一个后端同事聊, 定义一个类型是用int还是用string, 后来我们得出答案, 以前的机器存储比较贵, 能用int就不用string, 现在的存储不贵, 用string表示类型增加"可读性". 但是这个结论不能分享给不在同一个层次思考的人. 大多数人思考的层次还是"完成需求"而不是"最佳实践"
跟不同思考层次的人聊天, 不仅聊不出结果, 还能聊出误解, 在只为实现功能的人眼中, 如果给他说他写的代码不是最佳实践, 他就会说他"这是很正常的操作". 举个例子, 不要给不同功能的函数起一样的名字, 哪怕他们在不同的类, 只要两个类有关联, 仅仅为了阅读的时候能够"一次性根据名字懂得它的实际功能", 因为方法的注释不一定及时的被维护. 为了软件在逐渐庞大的过程中能够保证不腐烂, 这些细微之处的"最佳实践"在复用率比较高的代码里是必要的.
对于我自己而言, 阅读别人的代码有时候代入自己的"思维惯性"可能会导致忽略别人糟糕的设计埋下的隐患. 以为所有人都像自己那样把容易出问题的地方写的更加详细更加清晰, 就会察觉到别人是真的不在乎细节处理. 这大概就是事务的两面性,

每天把自己收拾的干干净净的人可能会觉得别人的打扮会别扭. 反倒是不在乎外表的人看谁都顺眼.

可能垃圾代码更适合职场

和网友讨论过屎山, 摘录大家的看法

  1. 迭代快, 赚钱快. 慢了的话 屎都吃不上一口热的
  2. 国内架构和技术经理都被优化了
  3. 屎山有助于保持就业率
  4. 很多领导怕被替代, 故意搞成别人很难掌握的屎山. 不是能力不行
  5. 现在付出的成本就是以后的收益(这是反对屎山的)
  6. 软件分为两种, 一种是业务型, 一种是工具型(暗指有的工具类还是认真一点写)
  7. 越是屎山别人越无法接手
  8. 规避不了熵增的问题, 最终都会变成一坨屎山
  9. 你想想你连屎山都搞不定, 说明自己的能力还不如屎山程序员
  10. 说屎山只有一种可能, 自己看不懂, 能看懂的代码都不是屎
  11. 很多时候是需求变更导致的, 所谓重构无非就是把别人的屎山变成他自己的屎山, 而且公司还有比他代码水平更差的, 但是人家是公司的老员工, 他不敢说什么

相关文章:

重构(二)

继续"提高代码质量" 接着上文提高代码质量, 需要从这几个特点入手 1、代码重用性。2、可读性。3、可扩展性。4、可靠性。5、高内聚,低耦合。 仅仅就"可读性"去分析一下吧, 毕竟例子实在是太多了 递归的"可读性"不如while循环 递归…...

centos7下制作DockerFile 镜像

文章目录 介绍DockerFile 常用命令示例1.创建Dockerfile文件2.构建Dockerfile镜像3.验证结果 小结 介绍 Dockerfile 是一个文本文件,包含了用于构建 Docker 镜像的所有命令和指令。它定义了镜像的构建过程,包括基础镜像、安装软件、设置环境变量、复制文…...

GFPS扩展技术原理(七)-音频切换消息流

音频切换消息流 Seeker和Provider通过消息流来同步音频切换能力,触发连接做切换,获取或设置音频切换偏好,通知连接状态等等。为此专门定义了音频切换消息流Message Group 为0x07,Message codes如下: MAC of Audio s…...

压缩qcow2镜像带来的性能损失简单分析

本文拟对压缩qcow2镜像所带来的虚拟机性能损失进行简单分析 背景 生产中发现使用压缩镜像启动的虚拟机开机总是会慢一些。 qcow2镜像的压缩方式为:qemu-img convert -p -c -O qcow2 zero_disk.qcow2 compress_disk.qcow2 分析 qemu代码:https://down…...

Kali操作系统简单介绍

Kali是一个集成了各种安全工具的操作系统 安全问题的根源 1.分层思想:网络和软件开发的分层方法 2.安全问题:分层思想导致的片面认识和系统脆弱性 3.人的因素:安全问题的最终根源是人的错误 传统安全建设 1.防护型安全建设:关闭不…...

LabVIEW物联网开发实战:专栏总述

本专栏以LabVIEW为开发平台,讲解物联网通信组网原理与开发方法,覆盖RS232、TCP、MQTT、蓝牙、Wi-Fi、NB-IoT等协议。 结合实际案例,展示如何利用LabVIEW和常用模块实现物联网系统的快速开发与原型设计,助你从基础到实战&#xff0…...

高效处理PDF文件的终极工具:构建一个多功能PDF转换器

在日常工作中,处理PDF文件几乎是每个人都不可避免的任务。无论是从PDF中提取数据、合并多个PDF文件,还是处理文件中的敏感信息和图像,PDF文件的处理都可能成为繁琐且耗时的工作。如果你是数据分析师、工程师,或者从事文档管理的工…...

Y3编辑器教程6:触发器进阶案例

文章目录 一、地形制作1.1 地形制作流程1.2 关卡白盒1.3 场景美化1.4 优化场景 二、触发结构三、玩家指引(函数封装)3.1 项目拆解3.2 功能实现3.2.1 绘制UI界面3.2.2 UI的读取显示和刷新3.2.3 交互功能3.2.4 最终实现 四、NPC对话系统4.1 项目拆解4.2 UI…...

react Ant Design

一、通过项目模版创建一个react项目 set NPM_CONFIG_REGISTRYhttps://registry.npmmirror.com pnpm create vite antd-demo cd antd-demo pnpm install pnpm install antd --save 打开项目: 修改:welcome.tsx import React from react; import { Butto…...

汽车电子零部件(14):APA(自动泊车辅助)/RPA(远程遥控泊车)/AVP(自动代客泊车)

APA: Automated Parking Assist (APA) systems,自动泊车辅助系统,是自动驾驶汽车的一个关键功能。自动泊车辅助系统(APA)利用超声波雷达、视觉传感器和ADAS处理器来定位合适的停车位。它识别适合车辆大小的停车位,规划停车路线,并控制方向盘、变速箱和油门踏板以辅助停…...

Hot100刷题计划-Day2-滑动窗口、双指针、数组、链表、动态规划

LeetCode Hot 100 是最常被考察的题目集合,涵盖了面试中常见的算法和数据结构问题。刷 Hot100可以让你在有限的时间内集中精力解决最常考的问题。不仅要写出代码,还要理解问题的本质、优化解法和复杂度分析。 滑动窗口 438. 找到字符串中所有字母异位词…...

[react 3种方法] 获取ant组件ref用ts如何定义?

获取ant的轮播图组件, 我用ts如何定义? Strongly Type useRef with ElementRef | Total TypeScript import React, { ElementRef } from react; const lunboRef useRef<ElementRef<typeof Carousel>>(null); <Carousel autoplay ref{lunboRef}> 这样就…...

考前倒计时98天

2024年12月21日到2025年3月29日共有 98​ 天 一、计算机基础 思维分类特征强调学科代表理论思维&#xff08;推理思维&#xff09;推理和演绎推理数学实验思维&#xff08;证实思维&#xff09;观察和总结自然规律归纳物理学计算思维&#xff08;构造思维&#xff09;设计和构造…...

iterm2 focus时灰色蒙层出现的解决办法

问题描述&#xff1a; 当前我的iterm2版本是3.5.10&#xff0c;是我最近才更新的&#xff0c;然后就出现以下页面显示问题&#xff0c;如图所示&#xff1a; 我个人对终端、编辑器等使用存在洁癖&#xff0c;尤其是页面显示效果不满意更是不能忍受&#xff0c;之前找了很久没有…...

合并K个升序链表(最优解)

题目来源 23. 合并 K 个升序链表 - 力扣&#xff08;LeetCode&#xff09; 题目描述 给你一个链表数组&#xff0c;每个链表都已经按升序排列。 请你将所有链表合并到一个升序链表中&#xff0c;返回合并后的链表。 示例 1&#xff1a; 输入&#xff1a;lists [[1,4,5],[1,3,…...

kubernates实战

使用k8s来部署tomcat 1、创建一个部署&#xff0c;并指定镜像地址 kubectl create deployment tomcat6 --imagetomcat:6.0.53-jre82、查看部署pod状态 kubectl get pods # 获取default名称空间下的pods kubectl get pods --all-namespaces # 获取所有名称空间下的pods kubect…...

How to run Flutter on an Embedded Device

basysKom GmbH | How to run Flutter on an Embedded Device https://github.com/sony/flutter-embedded-linux/wiki/Building-Flutter-Engine-from-source flutter源码下载(最新)-CSDN博客 flutter_engine 交叉编译【自定义编译器(最新)】_flutter。engine 修改-CSDN博客 …...

airflow docker 安装

mkdir -p /root/airflow cd /root/airflow && mkdir -p ./dags ./logs ./plugins ./configcd /root/airflow/ wget https://airflow.apache.org/docs/apache-airflow/2.10.4/docker-compose.yaml nano docker-compose.yamlAIRFLOW__CORE__LOAD_EXAMPLES: false #初始化…...

浅析InnoDB引擎架构(已完结)

大家好&#xff0c;我是此林。 今天来介绍下InnoDB底层架构。 1. 磁盘架构 我们所有的数据库文件都保存在 /var/lib/mysql目录下。 由于我这边是docker部署的mysql&#xff0c;用如下命令查看mysql数据挂载。 docker inspect mysql-master 如下图&#xff0c;目前只有一个数…...

华为云计算HCIE笔记02

第二章&#xff1a;华为云Stack规划设计 交付总流程 准备工作&#xff1a;了解客户的基本现场&#xff0c;并且对客户的需求有基本的认知。 HLD方案BOQ报价设备采购和设备上架 2.安装部署流程 硬件架构设计 硬件设备选配 设备上架与初始化配置 准备相关资料&#xff08;自动下载…...

鸿蒙项目云捐助第十讲鸿蒙App应用分类页面二级联动功能实现

鸿蒙项目云捐助第十讲鸿蒙App应用分类页面二级联动功能实现 在之前的教程中完成了分类页面的左右两侧的列表结构&#xff0c;如下图所示。 接下来需要实现左侧分类导航项的点击操作&#xff0c;可以友好的提示用户选择了哪一个文字分类导航项。 一、左侧文字分类导航的处理 …...

STM32低功耗模式结合看门狗

STM32低功耗模式结合看门狗 前言 最近做到一个需求要使用STM32的低功耗模式进行长时间待机应用&#xff0c;每隔十分钟发送一次数据到服务器上&#xff0c;当不发送的时候就处于低功耗模式。在经过一段时间的测试以后发现板子过三四天左右就没有数据上传服务器了&#xff0c;…...

数据迁移工具,用这8种!

前言 最近有些小伙伴问我&#xff0c;ETL数据迁移工具该用哪些。 ETL(是Extract-Transform-Load的缩写&#xff0c;即数据抽取、转换、装载的过程)&#xff0c;对于企业应用来说&#xff0c;我们经常会遇到各种数据的处理、转换、迁移的场景。 今天特地给大家汇总了一些目前…...

Sapro编程软件

Sapro软件是由西门子建筑科技公司开发的一款编程软件&#xff0c;主要用于Climatix控制器的编程、调试及相关功能实现.以下是其具体介绍&#xff1a; • 功能强大&#xff1a;可进行HVAC控制编程&#xff0c;实现设备控制、HMI用户访问和设备集成等功能&#xff0c;满足复杂的…...

Python图注意力神经网络GAT与蛋白质相互作用数据模型构建、可视化及熵直方图分析...

全文链接&#xff1a;https://tecdat.cn/?p38617 本文聚焦于图注意力网络GAT在蛋白质 - 蛋白质相互作用数据集中的应用。首先介绍了研究背景与目的&#xff0c;阐述了相关概念如归纳设置与转导设置的差异。接着详细描述了数据加载与可视化的过程&#xff0c;包括代码实现与分析…...

2024年图像处理、多媒体技术与机器学习

重要信息 官网&#xff1a;www.ipmml.org 时间&#xff1a;2024年12月27-29日 地点&#xff1a;中国-大理 简介 2024年图像处理、多媒体技术与机器学习&#xff08;CIPMT 2024&#xff09;将于2024年12月27-29日于中国大理召开。将围绕图像处理与多媒体技术、机器学习等在…...

java 1.8+springboot文件上传+vue3+ts+antdv

1.参考 使用SpringBoot优雅的实现文件上传_51CTO博客_springboot 上传文件 2.postman测试 报错 &#xff1a;postman调用时body参数中没有file单词 Resolved [org.springframework.web.multipart.support.MissingServletRequestPartException: Required request part file is…...

【机器人】机械臂轨迹和转矩控制对比

动力学控制和轨迹跟踪控制是机器人控制中的两个概念&#xff0c;它们在目标、方法和应用上有所不同&#xff0c;但也有一定关联。以下是它们的区别和联系&#xff1a; 1. 动力学控制 动力学控制是基于机器人动力学模型的控制方法&#xff0c;目标是控制机器人关节力矩或力&…...

如何利用矩阵化简平面上的二次型曲线

二次型曲线的定义 在二维欧式平面上&#xff0c;一个二次型曲线都可以写成一个关于 x , y x,y x,y的二元二次多项式&#xff1a; F ( x , y ) a 11 x 2 2 a 12 x y a 22 y 2 2 a 1 x 2 a 2 y a 0 0 \begin{equation} F(x,y)a_{11}x^22a_{12}xya_{22}y^22a_1x2a_2ya_00…...

【系统移植】制作SD卡启动——将uboot烧写到SD卡

在开发板上启动Linux内核&#xff0c;一般有两种方法&#xff0c;一种是从EMMC启动&#xff0c;还有一种就是从SD卡启动&#xff0c;不断哪种启动方法&#xff0c;当开发板上电之后&#xff0c;首先运行的是uboot。 制作SD卡启动&#xff0c;首先要将uboot烧写到SD卡&#xff…...