提高代碼復用率

? ? ? ?由于現在的互聯網企業業務比較繁忙,導致產品狗不停地提需求,還總是改來改去,最后留給程序猿的時間少之又少。程序猿也不是吃素的,干脆直接copy一下代碼隨便搞一下實現功能就行,也談不上所謂的精心設計了。這樣的確是縮短了開發的時間,但是到處都是重復代碼,大大提高了軟件維護的成本,為日后軟件的發展帶來了隱患。如果同一功能被復制粘貼了上百次,一旦這段代碼需要變更時,那簡直就是一種災難,改了這邊卻忘了改那邊。同一段代碼,當你Copy第一次的時候也許還能容忍,但是第二次的時候,你應該停下來思考一下了,這是一種優秀的編程習慣,我們要遵守DRY原則。

? ? ? ??我們應該多關注那些功能相似或者相近的函數或者類,因為這些地方容易存在大量相同或這相似的代碼,它們應當被復用。但由于過去程序結構不合理,與其他程序過于耦合,開發人員意識不夠,甚至由于開發時間的限制,它們被簡單地Copy了,所以我們應該去重構它們。

  • 當重復代碼存在于同一對象中時,也就是說一段代碼在該對象中出現了兩次以上的時候,我們應該把這段代碼抽取為方法。
  • 當重復代碼不在同一對象中時,那就運用抽取類的手段將重復的部分抽取到一個工具類中,然后讓其他類調用。
  • 當重復代碼不在同一對象中時,如果這些重復代碼存在著較強的業務相關性,可將這些代碼提取并封轉成一個實體類,該實體類能夠體現這種業務相關性。
  • 當重復代碼不在同一對象中時,也可以將相同的部分抽取為父類,不同的部分還留在原來的類中,然后讓其他類繼承該父類。
  • 當出現繼承泛濫時,將不同的部分用一個接口與多個實現來解決,也就是組合。
  • 當重構的代碼被相同部分和不同部分分割成了好多碎片的時候,也就是說相同的和不相同的夾雜,而且這個時候多半有順序,怎么破?很簡單了,定義一個父類,分解成數個有順序的方法(每個方法是一個步驟),代碼中相同的部分寫在父類中,不同的部分分別在子類中實現各自的步驟。

什么時候該用繼承,什么時候該用組合?

  • 如果存在一種IS-A的關系(比如Bee“是一個”Insect),并且一個類需要向另一個類暴露所有的方法接口,那么更應該用繼承的機制。
  • 如果存在一種HAS-A的關系(比如Bee“有一個”attack功能),那么更應該運用組合。

轉載于:https://www.cnblogs.com/DreamRecorder/p/9238271.html

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/452197.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/452197.shtml
英文地址,請注明出處:http://en.pswp.cn/news/452197.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

java 對 redis 的基本操作

前些天發現了一個巨牛的人工智能學習網站,通俗易懂,風趣幽默,忍不住分享一下給大家。點擊跳轉到教程。 一、server端安裝 1、下載https://github.com/MSOpenTech/redis 可看到當前可下載版本:redis2.6 2、安裝 1)解壓…

JsRender 前端渲染模板常用API學習

JsRender 常用API 1. $.templates() $.templates()方法是用來注冊或編譯模板的,使用的情況有以下幾種。 把html字符串編譯編譯成模板獲取使用script標簽聲明的模板,并返回一個模板對象把html字符串或者在script標簽中聲明的模板注冊成命名模板獲取之前就…

狀態圖

狀態圖(Statechart Diagram)是描述一個實體基于事件反應的動態行為,顯示了該實體如何根據當前所處的狀態對不同的事件做出反應。通常我們創建一個UML狀態圖是為了以下的研究目的:研究類、角色、子系統、或組件的復雜行為。

我身邊的手機應用開發者

手機應用火了,我身邊的一位朋友(A君)也投身到開發者行列,不過他還算聰明并沒有辭掉工作專做手機應用軟件開發。 其原因在于他們領導打算做一款自己的應用軟件,正當A君愁到底是做IOS平臺還是Android平臺的時候,領導說:…

學成在線--16.添加課程計劃

文章目錄一.需求分析二.API接口三.后端1.Dao2.Service3.Controller4.測試四.前端1.頁面原型說明1)添加按鈕2)視圖部分3)在數據模型中添加如下變量4)定義表單提交方法和重置方法2.Api調用1)定義 api方法2)調…

mac 下的操作

nodejs在Mac下的卸載 在 node 官網上下載的安裝包,用安裝包安裝的node.應該可以用一下命令行卸載: 在終端輸入以下命令: sudo rm -rf /usr/local/{bin/{node,npm},lib/node_modules/npm,lib/node,share/man/*/node.*} 刪除/usr/local/lib中的…

理解 maven 的核心概念

前些天發現了一個巨牛的人工智能學習網站,通俗易懂,風趣幽默,忍不住分享一下給大家。點擊跳轉到教程。 本文以類圖的方式,介紹 maven 核心的 12 個概念及相互之間的關系。 Table of Contents 1 maven管理的目標:工程…

時間跟蹤圖

事件跟蹤圖實質上是擴充的腳本,可以認為事件跟蹤圖是簡化的UML順序圖。

1088. [SCOI2005]掃雷Mine【網格DP】

Description 相信大家都玩過掃雷的游戲。那是在一個n*m的矩陣里面有一些雷,要你根據一些信息找出雷來。萬圣節到了 ,“余”人國流行起了一種簡單的掃雷游戲,這個游戲規則和掃雷一樣,如果某個格子沒有雷,那么它里面的數…

spring data jpa和mybatis的不同

使用spring data JPA和mybatis都是用來訪問數據庫,但他們的分工不同: 1.spring data jpa默認使用hibernate作為ORM實現,是spring 提供的一套jpa接口,使用spring data jpa主要完成一些簡單的增刪改查功能。 2.對于復雜的查詢功能會…

函數式編程很難,這正是你要學習它的原因

很奇怪不是,很少有人每天都使用函數式編程語言。如果你用Scala,Haskell,Erlang,F#或某個Lisp方言來編程,很可能沒有公司會花錢聘你。這個行業里的絕大部分人都是使用像Python,Ruby,Java或C#等面…

函數依賴

設R(U)是一個屬性集U上的關系模式,X和Y是U的子集。若對于R(U)的任意一個可能的關系r,r 中不可能存在兩個元組在X上的屬性值相等, 而在Y上的屬性值不等, 則稱“X函數確定Y”或“Y函數依賴于X”,記作X→Y。 X→Y&#x…

Java面試——線程池

1、類比介紹 假如有一個工廠,工廠里面有10個工人,每個工人同時只能做一件任務。 因此只要當10個工人中有工人是空閑的,來了任務就分配給空閑的工人做; 當10個工人都有任務在做時,如果還來了任務,就把任務進…

C#關鍵字的使用

params object[] 用于函數多參數的定義public static void Write(string format, params object[] arg);explicit 關鍵字用于聲明必須使用強制轉換來調用的用戶定義的類型轉換運算符。 例如,在下面的示例中,此運算符將名為 Fahrenheit 的類轉換為名為 Ce…

maven 中 pom.xml 配置文件標簽說明,dependencyManagement和dependencies區別

前些天發現了一個巨牛的人工智能學習網站,通俗易懂,風趣幽默,忍不住分享一下給大家。點擊跳轉到教程。 參考:http://zhaoshijie.iteye.com/blog/2094478http://blog.csdn.net/cpf2016/article/details/45674377 還有一篇轉載文章…

學成在線--17.我的課程

文章目錄一.需求分析二.API接口三.PageHelper1.PageHelper介紹2.添加依賴3.配置pageHelper四.Dao1.mapper 接口2.mapper.xml映射文件3.測試Dao五.Service六.Controller七.前端1.創建course_list.vue2.路由3.定義API方法4.前端視圖course_list.vue詳解1)API調用--在視…

碼是數據系統中的基本概念。所謂碼就是能唯一標識實體的屬性或屬性集合,他是整個實體集的性質,而不是單個實體的性質。 主屬性與非主屬性 包含在任何一個候選碼中的屬性 ,稱為主屬性(Prime attribute)。 不包含在任何…

關于C編程的一點感受

剛畢業的時候用了兩個多月的C語言編程,總的來說對它還是很有感受的,C是一個過程式語言,沒有像C,Java等OOP語言這樣那樣的一系列的規則和限制;它比較靈活,簡潔,高效;這些是給我的印象最深的。這是…

如何打造高效的多任務、高并發的網絡服務器系統?

同一個功能的軟件,不同的團隊,不同工程師去實現,肯定是千差萬別,甚至從根本上完全不同。所以軟件開發在未來很長時間內仍然是一項工匠的手工勞動,尤其像多任務,高并發,偏底層這種對實現技巧比較…

BZOJ.2780.[SPOJ8093]Sevenk Love Oimaster(廣義后綴自動機)

題目鏈接 \(Description\) 給定n個模式串,多次詢問一個串在多少個模式串中出現過。(字符集為26個小寫字母) \(Solution\) 對每個詢問串進行匹配最終會達到一個節點,我們需要得到這個節點所代表的子串出現在多少個模式串中。 建立廣義后綴自動機。每次插入…