SonarQube

SonarQube是用来检测代码质量的,但类似工具的推广常常遇到阻碍。

成型项目或僵尸项目可以理解,项目优化需要投入的人力成本和时间成本太大,而且最主要的是无法保证改动过程中不引入新的bug。那么大家会想,在项目立项初期配合使用,这应该没什么问题了吧?奈何理由这东西,只要想找,总是有的。毕竟大家都喜欢待在舒适区,不喜欢折腾。试想刚提交完代码没多久,邮件就提醒你需要优化,打开一看,原来又是for循环太多、嵌套太多、重复代码太多或者方法行数太多。why?我实现功能不就行了吗?时间这么紧迫,怎么有时间修改这种问题呢?连这些小问题都抓住不放?呵呵,以后有时间一定改。

我起初也这么想的,虽然知道好的习惯养成很重要,但还是避免不了有所抵触。不过好在上头规定相关类型bug必须清零,坚持的时间一长,收获还是蛮大,最直接的体现就是代码易读性加强了。这个时候我突然就想起了设计模式。

设计模式

自大二接触Java以来,就知道IT界有一种无上功法叫设计模式,然后就一直想着哪天能融会贯通,挥手间,就是一片锦绣代码。

可是这些年过去,设计模式给我的感觉就是遥不可及,仿佛它只存在于面试题中,而且奇怪的是大家闲时谈论技术也很少涉及,why? 首先自我反思,那是自身水平不行,get不到核心,但我相信这不是全部原因。

我认为设计模式的出现是为了更好的写好代码,它只是手段,不是目的。奈何这系列手段太高明,完全不是初级菜鸟的菜。初级菜鸟没掌握,那大神级别的平常为什么也不怎么谈论设计模式呢?我想,可能是因为不同层级的人,如果用设计模式里面的逼格名词谈论,根本就无法沟通,因为我们平常是这么讨论的:

  • 这个类负责创建这个对象,对。然后这边包装一下,对的。
  • 嗯,你这个类就是针对他的Interface做的一个Adapter,是的。
  • 你这个只创建一次,提高性能。哦,对,没错,但这样更好,balabala...

所以设计模式大部分情况下只是给大家提供了一条快速提升逼格的途径,要是没有时间上的积累,就算把所有设计模式的名字都背下来,可能还是不太会用 0.0

SonarQube & 设计模式

那么怎么才能优雅的掌握设计模式呐,想来想去,我的方法是先了解它的各种使用,知道它的存在,然后在具体的使用层面上只是借鉴它。如果你对代码有高要求,在任何情况下,都会努力去提高代码的可读性,都会去控制你的代码量、减少嵌套与循环、减少各种潜在风险时,我想时间长了,无师自通,自有一番风景。

从SonarQube谈设计模式的更多相关文章

  1. 以css为例谈设计模式

    什么是设计模式? 曾有人调侃,设计模式是工程师用于跟别人显摆的,显得高大上:也曾有人这么说,不是设计模式没用,是你还没有到能懂它,会用它的时候. 先来看一下比较官方的解释:"设计模式(Des ...

  2. 浅谈设计模式-visitor访问者模式

    先看一个和visitor无关的案例.假设你现在有一个书架,这个书架有两种操作,1添加书籍2阅读每一本书籍的简介. //书架public class Bookcase { List<Book> ...

  3. iOS 趣谈设计模式——通知

    [前言介绍] iOS的一种设计模式,观察者Observer模式(也叫发布/订阅,即Publich/Subscribe模式). 观察者模式,包含了通知机制(notification)和KVO(Key-v ...

  4. 浅谈设计模式--装饰者模式(Decorator Pattern)

    挖了设计模式这个坑,得继续填上.继续设计模式之路.这次讨论的模式,是 装饰者模式(Decorator Pattern) 装饰者模式,有时也叫包装者(Wrapper),主要用于静态或动态地为一个特定的对 ...

  5. 浅谈设计模式--单例模式(Singleton Pattern)

    题外话:好久没写blog,做知识归纳整理了.本来设计模式就是个坑,各种文章也写烂了.不过,不是自己写的东西,缺少点知识的存在感.目前还没做到光看即能记住,得写.所以准备跳入设计模式这个大坑. 开篇先贡 ...

  6. 浅谈设计模式在GIS中的应用

    设计模式在GIS中的应用 一.设计模式概述 随着面向对象技术的广泛应用,软件复用在越来越多的开发工程中被采用.在研究软件复用的过程中,设计模式的概念被提了出来.所谓设计模式就是一些设计面向对象的软件的 ...

  7. ios开发之再谈设计模式

    子曰:设计模式这东西,没有好坏之分,只有合适于不合适 天去面试很有意思,技术考官指着最后一道二选一的编程题说,这是昨天晚上专门为你新加的.当时我听后倍感惭愧. 虽然当时在纸上把大概思路和设计说了下.为 ...

  8. Spring源码分析 之浅谈设计模式

    一直想专门写个Spring源码的博客,工作了,可以全身性的投入到互联网行业中.虽然加班很严重,但是依然很开心.趁着凌晨有时间,总结总结. 首先spring,相信大家都很熟悉了. 1.轻量级  零配置, ...

  9. [Android&amp;Java]浅谈设计模式-代码篇:观察者模式Observer

    观察者,就如同一个人,对非常多东西都感兴趣,就好像音乐.电子产品.Game.股票等,这些东西的变化都能引起爱好者们的注意并时刻关注他们.在代码中.我们也有这种一种方式来设计一些好玩的思想来.今天就写个 ...

随机推荐

  1. Reflux中文教程——概览

    翻译自github上的reflux项目,链接:https://github.com/reflux/refluxjs 〇.安装及引入 安装: npm install reflux 引入: var Ref ...

  2. java 基础知识五 数组

    java  基础知识五  数组 数组保存的是一组有顺序的.具有相同类型的数据. 同一个数组中所有数据元素的数据类型都是相同的. 可以通过数组下标来访问数组,数据元素根据下标的顺序,在内存中按顺序存放 ...

  3. Maven工程webinfo下面的JSP页面无法加载.js、.css文件的解决方案

    --下面是我的工程路径 --我jsp的写法 -----启动工程,访问js文件的路径是这样的, href="http://localhost:8080/activiti/css/public. ...

  4. javascript实现99乘法表

    for(var i=1; i<=9; i++) { for(var j=1; j<=i;j++) { document.write(i+"x"+i+"=&qu ...

  5. mac下安装git,并将本地的项目上传到github

    mac下安装git 安装过程: 1.下载Git installer http://git-scm.com/downloads 2.下载之后打开,双击.pkg安装 3.打开终端,使用git --vers ...

  6. 微信小程序,前端大梦想(三)

    微信小程序的事件及生命周期   继续下节课,今天我们还是从四个方面来了解小程序:     ●常用事件和事件冒泡   ●配置   ●app生命周期及app对象的使用   ●页面的生命周期   一.事件的 ...

  7. ios 获取当前设备信息、内存

    //在[UIDevice currentDevice]中的属性 @property(nonatomic,readonly,strong) NSString *name; // e.g. "M ...

  8. 深度学习开发环境搭建教程(Mac篇)

    本文将指导你如何在自己的Mac上部署Theano + Keras的深度学习开发环境. 如果你的Mac不自带NVIDIA的独立显卡(例如15寸以下或者17年新款的Macbook.具体可以在"关 ...

  9. oracle实现like多关键字查询

    oracle实现like多关键字查询: select * from contract_info tt where 1=1 and REGEXP_LIKE(tt.contract_name,'关键字1| ...

  10. CSS清除float浮动

    一.浮动产生原因   -   TOP 一般浮动是什么情况呢?一般是一个盒子里使用了CSS float浮动属性,导致父级对象盒子不能被撑开,这样CSS float浮动就产生了. 本来两个黑色对象盒子是在 ...