[读书笔记] 代码整洁之道

书的示例是Java语言编写的,虽说不会影响阅读,但是后面几章讲应用这套方法论的时候,大篇幅的Java代码分析还是挺难受的,而且连java测试框架Junit都要细讲,对于非Java系的开发者来说,一些内容确是云里雾里。
书的前2/3能够适用全部的开发者,读完有很大收获。后面1/3讲到依赖注入,AOP等内容,这已经是Java的高级理论了,没有基础的读者理解起来还是比较费劲的。还有就是自动化测试是为开发者提供了很好的重构基础,不过这个实践还是需要在大公司才有机会尝试。
以下总结了一些自己阅读时的一些要点,虽然还未来得及切身实践,拜读之时却也颇有感受,这种书还是要反复阅读,实践之后会有更多体会。

代码整洁之道

  • 程序员遵从不了解混乱风险的经理的意愿,也是不专业的做法
  • 整洁的代码只做好一件事
  • NameString会比Name好吗?难道Name会是一个浮点数不成?
  • 明确是王道
  • 类名不应当是动词
  • 给每个类添加“GSD”前缀就不是什么好点子,为什么要搞得IDE没法帮助你?
  • 函数的第一规则是要短小,第二条规则是还要更短小
  • 函数应该做一件事,做好这件事,只做这一件事
  • 对于switch语句,我的规矩是如果只出现一次,用于创建多态对象,而且隐藏在某个继承关系中,在系统其他部分看不到,就还可能忍受
  • 标识参数丑陋不堪,宣布本函数不止做一件事,true or false
  • 当一组参数被共同传递,就像point的x、y那样,往往可以从参数创建对象,从而减少参数数量
  • 最好把try/catch代码块的主体部分不分抽离出来,另外形成函数
  • 我并不从一开始就按照规则写函数,我想没人做得到
  • 别给糟糕的代码加注释——重新写吧
  • 直接把代码注释掉是讨厌的做法,别这么干
  • 你今天编写的功能,极有可能在下一版本中被修改,但代码的可读性却会对以后可能发生的修改行为产生深远影响
  • 类并不简单地用get和set将其变量推向外间,而是暴露抽象接口,以便用户无需了解数据的实现就能操作数据本体
  • 过程是代码便于在不改动既有数据结构的前提下添加新函数,面向对象代码便于在不改动既有函数的前提下添加新类。
  • 对象暴露行为,隐藏数据;数据结构暴露数据,没有明显的行为
  • 当错误发生时,程序员有责任确保代码照常工作
  • 如果无法为某个类命以精确的名称,这个类大概就太长了
  • 系统应该由许多短小的类而不是少量巨大的类组成
  • 通常而言,方法操作的变量越多,就越粘聚到类上(内聚UP)
  • 软件项目的主要成本在于长期维护
  • 对象是过程的抽象,线程是调度的抽象

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

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

相关文章

iOS开发——GPUImage源码解析

一、基本概念 GPUImage:一个开源的、基于openGL的图片或视频的处理框架,其本身内置了多达120多种常见的滤镜效果,并且支持照相机和摄像机的实时滤镜,并且能够自定义图像滤镜。同时也很方便在原有基础上加入自己的滤镜Filter&#…

[读书笔记] 敏捷软件开发:原则、模式与实践

关于面向对象编程的一些理解,这本书主要看六大原则的部分,书中关于设计模式的内容由于之前的那本《设计模式与游戏完美开发》已经很好的讲解了游戏开发领域的应用,所以不多关注。 面向对象的六大原则 单一职责原则SRP:一个类应该…

Caffe-SSD相关源码说明和调试记录

1 对Blob的理解及其操作: Blob是一个四维的数组。维度从高到低分别是: (num_,channels_,height_,width_) 对于图像数据来说就是:图片个数,彩色通道个数,宽,高 Blob中数据是row-…

[游戏策划] 读书笔记

交互式媒体最有趣的地方在于,它让玩家直面问题,思考、尝试各种解决方案,并体验各种解决方案的结果。然后玩家可以回到思考阶段,规划下一步行动。这种反复试错的过程中,玩家的脑海里就会构建出一个互动的世界。 [读书笔…

YAML_02 playbook的ping脚本检测

ansible]# vim ping.yml---- hosts: allremote_user: roottasks:- ping:ansible]# ansible-playbook ping.yml //输出结果转载于:https://www.cnblogs.com/luwei0915/p/10615360.html

ECS框架学习

DOTS Unity DOTS是Unity官方基于ECS架构开发的一套包含Burst编辑器和JobSystem的技术栈,它旨在充分利用多核处理器的特点,充分发挥ECS的优势。 安装 Entities、Burst、Jobs、Hybrid Renderer(必选,用于DOTS的渲染相关&#xf…

辅助排序和Mapreduce整体流程

一、辅助排序 需求:先有一个订单数据文件,包含了订单id、商品id、商品价格,要求将订单id正序,商品价格倒序,且生成结果文件个数为订单id的数量,每个结果文件中只要一条该订单最贵商品的数据。 思路&#xf…

关于游戏开发流程的分析

问题 传统游戏开发过程中通常是:策划提出需求,美术制作需求中的资源,程序实现需求中的功能,并导入资源实现最终效果。你觉得策划、美术、程序三者在开发游戏的过程中应该是一种什么关系,是否存在多种开发模式&#xf…

Ubuntu18.04应用程序安装集锦

整理网上的资源: Python Web开发工具箱 ubuntu美化及超NB的zsh配置 api文档查询工具:zeal,dash(收费)转载于:https://www.cnblogs.com/johnyhe/p/10403967.html

final使用详解

final的使用及注意事项 final是一个可以修饰变量,方法,类的修饰符 final修饰的方法不能被重写 final修饰的类不能被继承 final修饰的变量为一个常量 final不能与abstract一起使用 注意:当final修饰一个变量时要么在声明时就给该变量赋值&…

[读书笔记] 史玉柱自述:我的营销心得

与下属的关系 从玩家角度设定目标 目标感的设计 论随机性 在前15分钟留住玩家 实际观察玩家对于游戏的翻译反应 好游戏是改出来的 注重细节 决策民主、责任人制度 论简单与复杂的关系 游戏经济中的投放与回收 避免进入降低压力的怪圈 创业初期的股份分配 单个行业…

记一次面试腾讯的奇葩经历

阅读本文大概需要 2.8 分钟。 作者:黄小斜 文章来源:微信公众号【程序员江湖】 ​ 上回说到,我腾讯面试出师不利,简历随即进入备胎池,不过没过多久,转机还是来了。 大概是一周之后,我的电话响起…

foot

码云链接&#xff1a;https://gitee.com/zyyyyyyyyyyy/codes/rcfdzmin4a82v975pl1ko47 效果图&#xff1a; 原网站截图&#xff1a; 源代码&#xff1a; <!DOCTYPE html><html><head><meta charset"UTF-8"><title></title><s…

jsp标签在JavaScript中使用时,可能会出现的一个问题。

直接上代码 1 <script type"text/javascript">2 var E window.wangEditor;3 var editor new E(#editor);4 // 或者 var editor new E( document.getElementById(editor) )5 editor.create();6 $(function () {7 $("#btn1&…

CTF小记录

WEB 题目都说了flag在index里所以可以直接构造payloadhttp://120.24.86.145:8005/post/index.php?filephp://filter/convert.base64-encode/resourceindex.php F12 抓包 Base64 Hackbar post get 代码审计 暴力解法 Url编码 本地登录&#xff1a;X-Forwarded-For: 127.0.0…

关于梦想(二)

马丁.路德.金说过“如果你的梦想还站立的话&#xff0c;那么没有人能使你倒下”。 独自仰望夜空&#xff0c;从古至今&#xff0c;不知多少人面对着浩瀚的夜空&#xff0c;满天的繁星而放飞梦想&#xff0c;放飞希望、放飞未来。斑斓璀璨的星空又见证了多少伟大梦想的实现&…

C学习笔记-gdb

gdb即GNU debugger&#xff0c;用来调试程序 gdb使用前提 要使用gdb&#xff0c;则需要在编译源代码时候使用-g参数 gcc -g –o test test.c启动gdb gdb 程序名 [corefile]corefile是可选的&#xff0c;但能增强gdb的调试能力 Linux默认是不生成corefile的&#xff0c;所以需要…

移动开发day1_过渡_2d转换_3d立体

今天是就业班开班的第一天&#xff0c;上完了一天的课&#xff0c;做点总结。 什么叫做移动web 专门在手机或者 平板电脑 浏览器网页 为什么要学习移动web 工资高 1. 人拥有的手机数 大于 电脑的个数 2. 微信 1. 微信公众号  2. 微信小程序   3. 移动web基础知识 可以用在微…

java数组初始化

数组初始化式只能用于声明同时赋值的情况下 如果没有显式赋值&#xff0c;则系统自动赋默认值null Java的对象都是在堆上分配空间 ① String [ ] anew String[ ]{" "," "," " }; ②String [ ] a{" "," "," "…