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

作爲一個工作時間並不算長的phper,卻參與了兩家公司的代碼重構.下面談談我的一些感受. 在mjm公司,當時我負責日常的需求開發和2.0的重構.當初的重構更多的是clean codes和一些代碼規範上的.用了phpcs去規範代碼,封裝了一些重複的代碼.並使用了單元測試,對重構的部分run了一遍.從做事習慣上來看,算是比較嚴謹.但重構效果也只是修修枝葉罷了.甚至可以說並沒有做到真正意義上的重構,當然這也和我當時的能力有限有關. 重構不是重生,但是卻能讓整個項目煥然新生.我上個月開始了一個新的項目,…
这篇文章本来该和同一系列的文章一起写的,因为最近换工作的缘故滞后了.重构是非常细碎的叠加,有很多值得注意的地方. 1.消灭过多的临时变量. 有时候过多的无意义的临时变量,真心让人抓狂,特别是过了比较长的时间,连写这段代码的人都不知道为何这么写了.比如下面这段代码,我们先分步骤来思考这个问题. 一个获得全部消费的方法里面充斥着各种乱七八糟的临时变量.我们当然可以不辞辛苦地把每一行都加上饱含善意的注释,但是增加注释不是最好的办法,往往是最后的办法. 很明显的是诸多变量的含义不明,导致整个逻辑也不清楚…
重构代码更多的是对程序的可读性和可扩展性上做一些优化. 首先我对可读性进行细化.借鉴大神川山甲的重构系列文http://www.cnblogs.com/baochuan/archive/2012/03/31/2425441.html,我也来抛砖引玉. 面对一些有bad smell的代码,我们应该如何处理呢? 我觉得应该遵循面向对象的一些最基本的原则:封装,复用,抽象,继承,组合优先. 1.封装是第一原则,让客户端的调用变得更简单,封装细节,暴露同一接口. 封装的第一步就是消灭重复的代码块儿.我所…
前言 上次v3版本,我們將Entity, Service, Dao, Utility都放到了類別庫裡面,讓我們可以輕鬆的在不同專案中用同一份組件.雖然文章沒有獲得太多的讚賞,不過相信那一定是太多人會這一招了.如果您已經會了,恭喜你,這是很重要的一步,沒有類別庫,後面我們很多事情都不容易實作出來. 今天要講的運用是interface,相信很多人都還是interface苦手,大部分的人還是卡在『為什麼我要用interface』,當我帶出可惡的PM需求時,大家應該會感同身受,而且覺得相當熟悉.跟著文章…
使用editplus已經好多年了,累積了不少的東西,想換IDE比較麻煩,所以就研究了一下用editplus搭配gofmt.exe配置go語言代碼自動格式化的功能.還好功夫不負有心人,終於被我搞懂了,不敢私藏,拿出來分享給大家,希望能對大家有所幫助. 使用editplus已經好多年了,累積了不少的東西,想換IDE比較麻煩,所以就研究了一下用editplus搭配gofmt.exe配置go語言代碼自動格式化的功能.還好功夫不負有心人,終於被我搞懂了,不敢私藏,拿出來分享給大家,希望能對大家有所幫助.…
我只用13行代碼開發的PHP框架,如果您對框架不理解,不知道框架究竟幫您做了什麽事,可以下載此框架看一下, 另外如果您想開發自己的框架也可以由這個框架的思路進行擴展. 源碼下載地址:http://download.csdn.net/detail/sibang/6197315 代碼: <?PHP /** PHP極簡框架 交流: QQ群: 223494678 http://7di.net 用法 http://URL http://URL/hello http://URL/seven.php?w=he…
1 代碼 UIViewController* modalController = [[UIViewController alloc]init];modalController.modalTransitionStyle = UIModalTransitionStyleCrossDissolve;modalController.modalPresentationStyle = UIModalPresentationFormSheet; //Resizing sizeCGPoint frameSize…
看代码 # encoding: utf-8 class CodeLineStat attr_reader :code_lines def initialize @code_lines = 0 end def stat(path) Dir.foreach(path) do |file| if file != "." && file != ".." then filePath = path + "/" + file if File.d…
Idea 单模块 1.在pom.xml中添加依赖 <build> <plugins> <plugin> <groupId>org.mybatis.generator</groupId> <artifactId>mybatis-generator-maven-plugin</artifactId> <version>1.3.2</version> <configuration> <v…
今天,跟著W3School學到了"JavaScript函數",代碼都挺簡單的,在運算符調用函數的地方寫了一個小程序.原碼程序是這樣的: <!DOCTYPE html> <html> <body> <h2>JavaScript 函数</h2> <p id="demo"></p> <script> document.getElementById("demo"…
今天測試了一下,在博客園裏HTML源碼編譯器裏寫CSS内部樣式,更新編譯后,内部樣式可用,但是會將寫的内部樣式代碼强制加上代碼注釋進行編譯,有點類似于强制注入.編譯后的效果就是在前面加入了一個空的p標簽 上一段IO流非常基礎的代碼. package com.paul; import java.io.FileReader; import java.io.FileWriter; import java.io.IOException; /** * 1.利用IO流複製一個文件 * 2.步驟如下 * 2.…
跳出找不到設定檔Can’t load configruaration fromC:\Users\…\AppData\Roaming\Windows Live Writer\WindowsLiveWriter.SourceCode.config 只要繼續點確定,一樣可以進入插入代碼的視窗中 再點選Option選擇你的設定,再點OK(直接點也可以), 下次再打開plugin就不會再跳錯誤了…
GITHUB: https://github.com/lin1270/spring_boot_sql2code 會自動生成model.mapper.service.controller. 代碼使用Nodejs編寫.代碼風格類C. 需要的前提: 1.SQL語句,並保存在該目錄下. 使用create語句哦. 2.使用命令行. node _.js className className.sql className className是自定義名字. 如果執行成功,會生成文件放到_result中,並在ex…
最近閒來無事,想著克隆一個電影網站. WWW.ROAK.COM 技術語言:JAVA EE  * j2ee核心组件:jsp.servlet.jdbc.ejb.jndi * 数据通信:xml标记语言 * 前台页面展示:html.dhtml.java-script.Ext开源框架 * 控制层:servlet.struts * 业务逻辑层:spring核心 * 数据持久层:hibernate * 中间件:ejb(3.0) * 操作系统:windows server 2018 * 数据库:db2.orac…
前记: 这个得首先声明一下,以下大部分内容均参考于:https://blog.csdn.net/wx_vampire/article/details/79585794,本随笔只作为学习作用,侵权删! 说一下我看的学习心得吧!对于BlockingQueue这个接口以及常用的实现类的用法,真的是不看不知道,一看吓一跳!有点超出了我的现有水平的理解范畴了!主要是里面的一些对Java基础中一些不常用的方法,修饰符的使用,这个对我来说真的算是涨姿势了. 还有就是,一些链表在处理数据的算法,这些也让我有点头…
public ActionResult btnExport(ReportViewModel model)         {             //接收需要导出的数据             List<ReportViewModel.EmployeeRegister> list = EmployeeRepository.GetEmployeePrportAll(model).ToList(); //命名导出表格的StringBuilder变量             StringBuil…
第一题 用堆维护. #include <cstdio> #include <algorithm> #include <queue> int n,i,f[400000],g[2][200000],j=0,k[400000]; int l,r; bool cho; struct pn{ int l,r,n; }; bool operator<(pn a,pn b){ return a.n>b.n; } std::priority_queue<pn>…
<?PHP /** PHP極簡框架 交流: QQ群: 223494678 http://7di.net 用法 http://URL http://URL/hello http://URL/seven.php?w=hello /**/ Header('Content-type: text/html; charset=UTF-8'); $w=isSet($_REQUEST['w']) ? AddsLashes($_REQUEST['w']) : ''; $w=(Trim($w)=='') ? 'in…
<meta http-equiv="Content-Type" content="text/html; charset=utf-8"> <body><title>原生js写的贪吃蛇网页版游戏特效代码 demo by js.alixixi.com</title></body> <script> Star = { init:function(){ var bigDiv = this.appendEl…
function addLoadEvent(func){ var oldonload=window.onload; if(typeof window.onload!='function') { window.onload=func; } else { window.onload=function() { oldonload(); func(); } } } function addClass(element,value) { if (!element.className) { element.c…
一.字符串[Uri]轉換出RouteData private RouteData UriToRouteData(Uri uri) { var query = uri.Query; ) { query = query.Substring(, uri.Query.Length - ); } var request = new HttpRequest("", uri.AbsoluteUri, query); var routeData= Url.RouteCollection.GetRout…
(1)node --inspect-brk debug/demo (2)通过 chrome 进行调试    (3) chrome://inspect 进入chrome调试界面    --inspect-brk 用命令启动 -brk意味者刚刚进入chrome自动暂停…
核心領域(Core-Domain) 為了使領域模型成為企業真正的資產, 模型中的關鍵核心部份需要足夠靈活和充分利用來創建應用程序的功能; 簡而言之, 核心領域是系統中最有價值的部份. 濃縮模型, 將最有價值, 最體現專門知識的概念突顯出來, 並開發出滿足系統願景的柔性設計. 核心領域取決於個人的觀點, 也是通過反複迭代來確定的. 精煉的逐步升級 應用以下的技術沒有嚴格的順序要求, 但不同的技術對設計產生的影響會有所不同: 領域願景聲明(Domain Vision Statement): 描述領域…
转自: http://www.loliman3000.com/tech/2fe33ce32906f0302412881.php 下面的程序風格規則提煉自Brian Kernighan和P. J. Plauger的經典著作<The Elements of Programming Style>(由McGraw Hill出版).由於原書出版較早並主要針對Fortran語言,本文僅提煉適用於當今主流編程語言的風格要素. ——Clive Studio 1.Write clearly - don‘‘t b…
python 學習深淺拷貝.集合..作用域.函數 2020開年新冠肺炎流行大部分人員.工廠.單位無法復工生產,人員隔離每天外出都要戴口罩,在家隔離期間悶壞了感覺把半年的口糧都幹掉了,嚴重考察大家的資本厚度,估計很多年輕人快要吃土,咱們還是要繼續學習python爭取有機會增加錢包厚度,爭取在以後的生活中可以像有錢人一樣實現財務自由 深淺拷貝 # 淺拷貝----只拷貝第一層copy()import copyhusband = ['xiaohu', 111, [15000, 6000]] wife =…
前文再續,書接上一回.上次總結python錯誤碼返回與異常機制共用的一些原則,毫無疑問地,仍會出現程序不穩定的現象(好吧,可能是我個人能力問題).在公司做的一個項目中,出現了因爲使用外部模塊造成python程序內存暴漲直接崩潰的現象(被系統殺掉了,沒有返回MemoryError(估計是外部模塊C代碼的BUG),簡單搜了下,可能使用內存限制模塊可以在代碼內解決這一問題(import resource),沒嘗試),由於估計是因爲外部模塊用到C寫代碼造成崩潰,所以想到了用守護進程的形式去處理這個問題,…
我現在是個窮屌,沒錯.我清楚的知道這一點,但是我也知道,我能改變. 之前幹了7年的評估行業,中間換了3家公司,第一家公司待的時間最長,待了5年.2018年開始,我就在思考轉行.之前在第一家企業接觸過一點企業教練“Coach”的內容.感覺還是蠻有用的,可惜自己沒有機會參加一個系統的學習.但是我多多少少還是有了一些基本的概念.其實拿中華古典的智慧解釋,就是窮則思變.在Coach裡,把思變的過程到具體的操作更加的細節話了,這是很好的. 人,可以窮,但絕不能懶惰.窮,可能是思想上的貧乏,也可能是物質上的…
上一篇文章分享了透過POST 方式傳資料回Server,這一篇來談談有關於透過GET的方式傳遞 首先,如我預期的一樣,透過網址傳遞,會產生編碼問題,這邊我就順代解掉,希望有碰到的人 可以不用為此煩惱.. 解說一下範例,手機傳遞給Server後,Server收到參數,直接印出來,然後手機再將資料取回,非常的簡單流程 中間只有傳遞不處理任何資料.. Server side (C#) : using System; namespace EchoService { public partial clas…
From: http://www.dotblogs.com.tw/joysdw12/archive/2012/12/13/85629.aspx 前言 在網頁執行中可能會因為資料量大或其他原因影響使用者按下按鈕時頁面還在讀取而停住等待的情況發生,當碰到這種情況時,使用者可能以為沒按到而重複點擊按鈕,而導致重複送出的問題發生,碰到這種問題我們可以使用簡單的jQuery與Css代碼來處理,請看範例: 範例 首先先去找一張 Loading 的圖片,如下: 接下來編寫HTML碼,建立DIV標簽放置相關內容…
一.初始化 所有Flask程序都必須創建一個程序實例.Web服務器使用一種名爲Web服務器網關接口的協議,把接收自客戶端的所有請求都轉交給這個對象處理.程序實例書Flask類的對象,創建代碼: from flask import Flask app = Flask(__name__) Flask類的構造函數只有一個必須指定的參數,即程序主模板或包的名字.在大多數程序中,python的__name__變量就是所需的值. 將構造函數的name參數傳給Flask程序,這一點可能會讓Flask開發新手心…