琐碎的想法(一)代码“优雅”的含义

优雅的含义

代码优雅曾是翻译而来的,优雅这一个词语源于单词elegant。

elegant有三种含义,优美的(形容举止),精美的(形容物品),简明的。 形容代码上,应该包含了后两种含义。

elegant表示”人为的,通过有意识的,特意的训练达到的”。

  • 从这个角度讲,罗马不是一天建成的,好代码也是。
  • 我们需要通过不断训练,才能逐步减少不好的代码。

下面,出一个数据库字段设计的题目,小伙伴们来体会一下。 如果让你设计一个带删除的用户表,将如何添加?

CREATE TABLE t_user (
  user_id bigint(20) NOT NULL AUTO_INCREMENT COMMENT '用户ID',
  nickname varchar(100) NOT NULL COMMENT '昵称',
  sex varchar(10) NOT NULL COMMENT '性别 男:m,女:f',
  status varchar(10) NOT NULL COMMENT '状态 正常:normal,禁用:prohibit',
  create_time datetime NOT NULL COMMENT '注册时间'
  PRIMARY KEY (user_id) USING BTREE,
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_bin ROW_FORMAT=DYNAMIC COMMENT='用户主表';
  • A. 在 status字段中加入delete 类型,表示被删除
  • B. 在 t_user表中加入 delete_statusdelete_time字段表示删除状态和删除时间
  • C. 新建一张 t_deleted_user(user_id, create_time)表,表示被删除的用户
  • D. 在 t_user表中加入 delete_status字段
  • E. 在 t_user表中加入 delete_time字段

首先从实现来讲,A、B、C、D、E都能实现需求,但是从设计角度考虑,我们逐一排除选项。

  • A: 首先它的问题在于 status的状态表示为用户审核状态,一般由后台审核人员进行控制,不应该和删除状态混用。比如,这一个字段无法描述一个被用户自己删除(注销)后又被审核人员禁用的用户。先排除。
  • C:这种模式很不错,每一项功能一张表,和其他互不干扰。不过在开发前期,不适合把和主表相关性特别强的列进行拆分,如果在后续用户数量爆炸,而数据字段内容极其多时,可以考虑。
  • B、D、E:
  • B:是很多程序员选择的办法,每一次新增功能需求,就新增字段。一般一项是功能字段,一项是使用功能的时间点。在大部分情况下,这是一种通用的选择,但这题上还可以继续简化。先搁置
  • D:这个答案这个字段可以表示用户的删除状态,也和审核状态区分,下面看看和E的比较。
  • E:使用一个字段,即表示了用户的删除状态,也表示了用户当时的操作时间,这在目前的需求上比较符合。

对于博主而言,比较喜欢E这个选项,大家怎么看,欢迎评论!

Original: https://www.cnblogs.com/kwanwoo/p/13955282.html
Author: Kwanwooo
Title: 琐碎的想法(一)代码“优雅”的含义

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/589595/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

  • javaGUI中下拉列表联动问题

    首先 : 具体解释下 标题 下拉列表联动 就是将两个或两个以上的下拉列表连接(称作连接,后面就明白什么意思了) 简单的 例如 当我们点击别的省或市时 简而言之 就是实现下拉列表的联…

    Java 2023年6月5日
    094
  • Java中的反射机制

    1.聊聊Java中的反射机制 (1)先说说静态编译和动态编译: ①静态编译就是在编译的时候把你所有的模块都编译进exe里去,当你启动这个exe的时候所有模块都加载进来了。你写小程序…

    Java 2023年6月9日
    071
  • CAS 单点登录【2】自定义用户验证

    方案1:CAS默认的JDBC扩展方案: CAS自带了两种简单的通过JDBC方式验证用户的处理器。 这两个处理类位于cas-server-support-jdbc这个扩展工程下。 第…

    Java 2023年5月29日
    079
  • 62.可

    sdfdsf posted @2022-09-28 08:36 随遇而安== 阅读(4 ) 评论() 编辑 Original: https://www.cnblogs.com/55…

    Java 2023年6月7日
    097
  • Vuex 简单使用

    官网:https://vuex.vuejs.org/zh/ 参考文章:https://www.cnblogs.com/chinabin1993/p/9848720.html Vue…

    Java 2023年6月13日
    065
  • spring boot启动的yml放在配置中心的流程管理

    引言 在上一节《淘东电商项目(09) -Maven私服的上传与下载详解》,主要讲解了如何上传jar包到Maven私服以及如何从Maven私服下载jar包。 代码已提交至Github…

    Java 2023年5月30日
    0106
  • SpringBoot Maven不自动下载问题

    通过我海明哥解决的,他加了红色字体部分 就搞定了 Original: https://www.cnblogs.com/gjths/p/13806869.htmlAuthor: Ex…

    Java 2023年6月13日
    086
  • Springboot中整合knife4j接口文档

    在项目开发过程中,web项目的前后端分离开发,APP开发,需要由前端后端工程师共同定义接口,编写接口文档,之后大家都根据这个接口文档进行开发。 什么是knife4j 简单说knif…

    Java 2023年6月8日
    089
  • 链表算法题解题技巧归纳总结

    最近集中刷了一批链表的题型,在这里总结一下解题技巧,以及对应题目的解题思路。 解题思路并不会细致入微,主要是为了总结归类,并且希望用几句话来激发灵感,权当是没思路时的指引以及以后复…

    Java 2023年6月5日
    064
  • 【SpringBoot】【3】读取配置文件中的参数并配置给全局使用

    前言: 读取配置文件参数的方法:@Value(“${xx}”)注解。但是@Value不能为static变量赋值,而且很多时候我们需要将参数放在一个地方统一管…

    Java 2023年5月29日
    0147
  • AdoptOpenJDK(JAVA环境)安装

    检测是否存在JDK 接下来可以将 java 开头的安装包均卸载即可 下载JDK 解压完之后, /opt/module/ ⽬录中会出现⼀个 jdk8u252-b09的⽬录 配置JDK…

    Java 2023年5月29日
    077
  • JSP的文件上传和下载

    文件的上传和下载 文件的上传和下载,是非常常见的功能。很多的系统中,或者软件中都经常使用文件的上传和下载。比如:微信头像,就使用了上传。邮箱中也有附件的上传和下载功能。 文件的上传…

    Java 2023年6月15日
    0114
  • ArrayList扩容机制

    写在前面 数据结构在面试中基本都是常问的,但是一般开发中基本上都是在使用没有去关心过怎么实现的。 在数据结构中,链表是一种线性存储结构,也就是常说的线性表。 概念:线性表,是数据结…

    Java 2023年6月5日
    085
  • 【解惑】领略Java内部类的“内部”

    转自:http://www.iteye.com/topic/494230 内部类有两种情况: (1) 在类中定义一个类(私有内部类,静态内部类) (2) 在方法中定义一个类(局部内…

    Java 2023年5月29日
    078
  • linux 与 windows 挖门罗币总结

    比特币之前一直很火,初次了解的时候才2000RMB一枚..看不懂哇,错失良机…当然了,看得懂也不买不起..当时还是穷学生. 最近又一直看到黑客利用linux漏洞挖门罗币…

    Java 2023年6月16日
    083
  • AUSTOj2

    include for(int i=0;i Original: https://www.cnblogs.com/liujy2233/p/16746441.htmlAuthor: 平…

    Java 2023年6月15日
    071
亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球