phper談談最近重構代碼的感受(1)
作爲一個工作時間並不算長的phper,卻參與了兩家公司的代碼重構.下面談談我的一些感受.
在mjm公司,當時我負責日常的需求開發和2.0的重構.當初的重構更多的是clean codes和一些代碼規範上的.用了phpcs去規範代碼,封裝了一些重複的代碼.並使用了單元測試,對重構的部分run了一遍.從做事習慣上來看,算是比較嚴謹.但重構效果也只是修修枝葉罷了.甚至可以說並沒有做到真正意義上的重構,當然這也和我當時的能力有限有關.
重構不是重生,但是卻能讓整個項目煥然新生.我上個月開始了一個新的項目,我第一次獨自架構一個項目,從底層慢慢搭架子.我開始發現並不是說mvc框架就能解決所有或者說規避設計模式的使用.我開始發現了設計模式和面向對象原則在很多地方可以使用開來,下面我一一道來.
第一個要說的肯定是類的單一職責性.在<<設計模式之禪>>裏面開篇就在講這個,這個概念也是飽受爭議.不是說這個原則有錯,而是我們因爲個人能力見解以及實際情況的不同,對一個類的職責劃分可能出現很多分歧.
一個類最好只做它本職工作的東西,不要太"牛",什麼都去實現。其實這和人做事的道理是一樣的,全面發展往往都是全面平庸,點帶動面自然是例外。
我後面所舉例都是基於cakephp框架下的實踐,對cakephp並不熟悉的人,可以自己google.
比如我在處理一次對數據的再加工的func的時候,我並沒有往之前處理批量的那個helper類裏面去增加一個新的func,而是重新創建了個對應的SingRow類,把新的處理func給了它。讓批量處理的去找專門批量處理的類,各司其職。就算以後有了新的處理要求,我也能很輕鬆地進行add.如果長期扔給老的類,最後會導致類的過於臃腫。
讓類專一一點。清爽的代碼和結構,會讓你後面run better.
越簡單的道理,我們越會忽略,但是這是真正寫出better codes的first step!
phper談談最近重構代碼的感受(1)的更多相关文章
- phper談談最近重構代碼的感受(3)
这篇文章本来该和同一系列的文章一起写的,因为最近换工作的缘故滞后了.重构是非常细碎的叠加,有很多值得注意的地方. 1.消灭过多的临时变量. 有时候过多的无意义的临时变量,真心让人抓狂,特别是过了比较长 ...
- phper談談最近重構代碼的感受(2)
重构代码更多的是对程序的可读性和可扩展性上做一些优化. 首先我对可读性进行细化.借鉴大神川山甲的重构系列文http://www.cnblogs.com/baochuan/archive/2012/03 ...
- 转:[ASP.NET]重構之路系列v4 – 簡單使用interface之『你也會IoC』
前言 上次v3版本,我們將Entity, Service, Dao, Utility都放到了類別庫裡面,讓我們可以輕鬆的在不同專案中用同一份組件.雖然文章沒有獲得太多的讚賞,不過相信那一定是太多人會這 ...
- 配置editplus,讓其支持代碼自動格式化功能.
使用editplus已經好多年了,累積了不少的東西,想換IDE比較麻煩,所以就研究了一下用editplus搭配gofmt.exe配置go語言代碼自動格式化的功能.還好功夫不負有心人,終於被我搞懂了,不 ...
- 我用了13行代碼開發出来的PHP框架
我只用13行代碼開發的PHP框架,如果您對框架不理解,不知道框架究竟幫您做了什麽事,可以下載此框架看一下, 另外如果您想開發自己的框架也可以由這個框架的思路進行擴展. 源碼下載地址:http://do ...
- 关于ios 8 7 下的模态窗口大小的控制 代碼+場景(mainstoryboard)( Resizing UIModalPresentationFormSheet )
1 代碼 UIViewController* modalController = [[UIViewController alloc]init];modalController.modalTransit ...
- ruby簡單的代碼行統計工具
看代码 # encoding: utf-8 class CodeLineStat attr_reader :code_lines def initialize @code_lines = 0 end ...
- Mybatis逆向生成代碼
Idea 单模块 1.在pom.xml中添加依赖 <build> <plugins> <plugin> <groupId>org.mybatis.gen ...
- 華氏溫度轉化為攝氏溫度的簡單JavaScript代碼
今天,跟著W3School學到了"JavaScript函數",代碼都挺簡單的,在運算符調用函數的地方寫了一個小程序.原碼程序是這樣的: <!DOCTYPE html> ...
随机推荐
- python文本文件,生成指定的文件格式
import os import sys import string #在一个特定的模式打开指定的文件,获取文件句柄 def getFileIns(filePath,model): print(&qu ...
- UVA-11134-Fabled Rooks (结构排序+贪婪)
这个问题更像八皇后问题,但在位置在大选前必须进行排序,让左侧的优选位置,我没想到这死脑筋! 行,这个问题是不是代码贴. 版权声明:本文博客原创文章.博客,未经同意,不得转载.
- Spring.Net+NHibenate+Asp.Net Mvc+Easyui框架
Spring.Net+NHibenate+Asp.Net Mvc+Easyui框架 初次接触Spring.Net+NHibenate+Asp.Net Mvc+Easyui框架,查阅了相关资料,了解了框 ...
- android application简要类(一)
每次应用程序执行.应用application保持实例化的阶级地位.推而广之applicaiton类别,能够完成以下3长期工作: 1.至android应用级事件,如广播的实现中低声回应. 2.传递应用程 ...
- 在PHP中如何连接到数据库
首先我们先运行WampServer中的phpMyAdmin随即弹出phpMyAdmin页面 在弹出的页面中左边是数据库列表 右边是相应的设置 选择一个数据库 在里面创建一张数据表 注意创建数 ...
- select省市联动选择城市 asp.net mvc4
本文在 http://www.cnblogs.com/darrenji/p/3606703.html(感谢博主的分享)基础上加入全国各省市,从文件中读取全国省市县,组成省市联动的选择标签 在Model ...
- java数字字符串累加1的解决方案
近期操作项目遇到这样的问题,研究了下搞出了一个解决方案. //num也可以是在数字字符串里面截取的,比如我有14位的数字字符串前六位是市级,7,8位代表县区,后两位代表乡镇,最后四位是累计+1的,这个 ...
- Ninject依赖注入——构造函数、属性、方法和字段的注入
Ninject依赖注入——构造函数.属性.方法和字段的注入(三) 1.Ninject简介 Ninject是基于.Net平台的依赖注入框架,它能够将应用程序分离成一个个高内聚.低耦合(loosely-c ...
- RoleManager 进行角色管理
ASP.NET Identity 使用 RoleManager 进行角色管理 (VS2013RC) 注:本文系作者原创,但可随意转载. 最近做一个Web平台系统,系统包含3个角色,“管理员, 企业用户 ...
- 2 MySQL安装
目录: 1. mysql安装简介2. 下载AppServ3. 安装AppServ4. 使用phpmyadmin连接MySQL5. 使用MySQL Command Line Client 连接MySQL ...