phper談談最近重構代碼的感受(2)

重构代码更多的是对程序的可读性和可扩展性上做一些优化。

首先我对可读性进行细化。借鉴大神川山甲的重构系列文http://www.cnblogs.com/baochuan/archive/2012/03/31/2425441.html,我也来抛砖引玉。

面对一些有bad smell的代码,我们应该如何处理呢?

我觉得应该遵循面向对象的一些最基本的原则:封装,复用,抽象,继承,组合优先。

1.封装是第一原则,让客户端的调用变得更简单,封装细节,暴露同一接口。

封装的第一步就是消灭重复的代码块儿。我所说的代码块儿也包括同一个类,两个方法含有相同表达式。

比如列表显示查询这段:

如果function pending,function index()的查询只是某些字段不同,而查询内容相同。完全可以把公共的这段剥离出来,并传递不同查询参数。

下面就要说到可读性,$status =1 或者等于2的含义是什么,也许现在状态少还好理解,可如果以后状态更多了呢,有更多人参与这个项目的开发,去理解代码就需要更多成本。所以建议定义常量,让代码可读性变强。常量放到对应Model里面。

eg:

$query[‘status‘] = SomeModel::APPROVED;

总结:DRY原则 + more readable.

时间: 2024-08-10 00:07:44

phper談談最近重構代碼的感受(2)的相关文章

phper談談最近重構代碼的感受(1)

作爲一個工作時間並不算長的phper,卻參與了兩家公司的代碼重構.下面談談我的一些感受. 在mjm公司,當時我負責日常的需求開發和2.0的重構.當初的重構更多的是clean codes和一些代碼規範上的.用了phpcs去規範代碼,封裝了一些重複的代碼.並使用了單元測試,對重構的部分run了一遍.從做事習慣上來看,算是比較嚴謹.但重構效果也只是修修枝葉罷了.甚至可以說並沒有做到真正意義上的重構,當然這也和我當時的能力有限有關. 重構不是重生,但是卻能讓整個項目煥然新生.我上個月開始了一個新的項目,

phper談談最近重構代碼的感受(3)

这篇文章本来该和同一系列的文章一起写的,因为最近换工作的缘故滞后了.重构是非常细碎的叠加,有很多值得注意的地方. 1.消灭过多的临时变量. 有时候过多的无意义的临时变量,真心让人抓狂,特别是过了比较长的时间,连写这段代码的人都不知道为何这么写了.比如下面这段代码,我们先分步骤来思考这个问题. 一个获得全部消费的方法里面充斥着各种乱七八糟的临时变量.我们当然可以不辞辛苦地把每一行都加上饱含善意的注释,但是增加注释不是最好的办法,往往是最后的办法. 很明显的是诸多变量的含义不明,导致整个逻辑也不清楚

為 Swift 代碼編寫含有 Mardown 語法的文檔

原文:Documenting Your Swift Code in Xcode Using Markdown 作者:GABRIEL THEODOROPOULOS 译者:kmyhy 在 Xcode 7 的所有新功能中,有一個最引人注目的新功能,能够讓你以更好的方式来书写代码文檔.從 Xcode 7 開始,開發者終於可以在他們的文檔中使用强大 Markdown 語法來進行富文本编辑了,Markdown 語法用一些特殊的關鍵字來描述文檔中的不同部分,比如參數.函數返回值等,從而使這些結構顯示出不同的樣

转:[ASP.NET]重構之路系列v4 – 簡單使用interface之『你也會IoC』

前言 上次v3版本,我們將Entity, Service, Dao, Utility都放到了類別庫裡面,讓我們可以輕鬆的在不同專案中用同一份組件.雖然文章沒有獲得太多的讚賞,不過相信那一定是太多人會這一招了.如果您已經會了,恭喜你,這是很重要的一步,沒有類別庫,後面我們很多事情都不容易實作出來. 今天要講的運用是interface,相信很多人都還是interface苦手,大部分的人還是卡在『為什麼我要用interface』,當我帶出可惡的PM需求時,大家應該會感同身受,而且覺得相當熟悉.跟著文章

配置editplus,讓其支持自動格式化代碼的功能

使用editplus已經好多年了,累積了不少的東西,想換IDE比較麻煩,所以就研究了一下用editplus搭配gofmt.exe配置go語言代碼自動格式化的功能.還好功夫不負有心人,終於被我搞懂了,不敢私藏,拿出來分享給大家,希望能對大家有所幫助. 啥也不說了,請看操作動畫: 再來一個,用來查看GO幫助文檔 希望該教材能對您有所幫助, Go語言技術群:195112

配置editplus,讓其支持代碼自動格式化功能.

使用editplus已經好多年了,累積了不少的東西,想換IDE比較麻煩,所以就研究了一下用editplus搭配gofmt.exe配置go語言代碼自動格式化的功能.還好功夫不負有心人,終於被我搞懂了,不敢私藏,拿出來分享給大家,希望能對大家有所幫助. 使用editplus已經好多年了,累積了不少的東西,想換IDE比較麻煩,所以就研究了一下用editplus搭配gofmt.exe配置go語言代碼自動格式化的功能.還好功夫不負有心人,終於被我搞懂了,不敢私藏,拿出來分享給大家,希望能對大家有所幫助.

菜鳥,程序員,大師,神人 四個等級寫出代碼的區別.

# !/usr/bin/env python# -*- coding: utf-8 -*-# 據說係菜鳥,程序員,大師,神人 四個等級寫出代碼的區別...import math as m#for i in range(100000): x = int(m.sqrt(i + 100)) y = int(m.sqrt(i + 268)) if(x * x == i + 100) and (y * y == i + 268): print (i)#print([i for i in range(100

[個人紀錄] WindowsLiveWriter 插入代碼跳出錯誤

跳出找不到設定檔Can't load configruaration fromC:\Users\-\AppData\Roaming\Windows Live Writer\WindowsLiveWriter.SourceCode.config 只要繼續點確定,一樣可以進入插入代碼的視窗中 再點選Option選擇你的設定,再點OK(直接點也可以), 下次再打開plugin就不會再跳錯誤了

從代碼和Xib中提取中文空間 并設置文本

老闆說要支持 多語言... 於是蛋疼開始了.. 一開始還想 一個個文件中  去尋找和替換 ...  但是文件數量太大了  沒改幾個  自己就受不了了 看了下 主要.m 文件 和json 文件中用到中文,  於是寫了個 提取這兩個文件的中文到一個文件中.  並且 根據自己項目的狀態  在查找的時候,   把文字用 一個宏包裹起來 相當於 NSLocalizedString(<#key#>, <#comment#>) 提取的代碼   https://github.com/li61853