zoukankan      html  css  js  c++  java
  • 琐碎的想法(一)代码“优雅”的含义

    优雅的含义

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

    在英语字典的解释

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

    1. 指代码书写规范好,让人看着赏心悦目,
    2. 指代码逻辑清晰、易懂,不采用炫技代码。

    在词根上的含义

    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这个选项,大家怎么看,欢迎评论!

  • 相关阅读:
    端口服务
    系统设计的主要原则是什么?
    Dynamics CRM2015 Custom Code Validation Tool工具的使用
    CONFIGURE ADFS 3.0 WITH SHAREPOINT 2013
    Sharepoint Solution Gallery Active Solution时激活按钮灰色不可用的解决方法
    Dynamics CRM 2015Online Update1 new feature之 插件跟踪日志
    Dynamics CRM2013/2015 Plugin注册工具Register New Assembly时无法看到注册按钮的解决办法
    Dynamics CRM 2015 站点地图公告配置实体显示名称的变更
    Dynamics CRM 2015 Online Update1 UI界面的更新变化
    SQL Server2012 AlwaysOn 无法将数据库联接到可用性组 针对主副本的连接未处于活动状态
  • 原文地址:https://www.cnblogs.com/kwanwoo/p/13955282.html
Copyright © 2011-2022 走看看