欧美一级特黄大片做受成人-亚洲成人一区二区电影-激情熟女一区二区三区-日韩专区欧美专区国产专区

軟件設(shè)計(jì),那些你不知道的事-創(chuàng)新互聯(lián)

代碼質(zhì)量和產(chǎn)出是衡量一個(gè)程序員是否優(yōu)秀最直接的標(biāo)準(zhǔn)。如何提高代碼質(zhì)量和產(chǎn)出?這就要從軟件重構(gòu)和review入手。市面上有很多關(guān)于重構(gòu)和review的書(shū)籍,但是看完之后,代碼能力并不能立竿見(jiàn)影顯著提升,只能幫助我們解決表面的bug和規(guī)范點(diǎn),無(wú)法幫助我們發(fā)現(xiàn)更深層次的設(shè)計(jì)問(wèn)題。

成都服務(wù)器托管,創(chuàng)新互聯(lián)提供包括服務(wù)器租用、內(nèi)蒙古服務(wù)器托管、帶寬租用、云主機(jī)、機(jī)柜租用、主機(jī)租用托管、CDN網(wǎng)站加速、國(guó)際域名空間等業(yè)務(wù)的一體化完整服務(wù)。電話咨詢:18982081108

從設(shè)計(jì)角度來(lái)考慮review,識(shí)別代碼壞味道可以可以有效減少技術(shù)債務(wù)。技術(shù)債務(wù)是指有意或無(wú)意的做出錯(cuò)誤的或非最優(yōu)的設(shè)計(jì)決策所引發(fā)的債務(wù)。債務(wù)越積越多,最后只能重新徹底重構(gòu)項(xiàng)目才能解決問(wèn)題,這也叫做技術(shù)破產(chǎn)。如何解決技術(shù)債務(wù)問(wèn)題,就要從根源上明確引起技術(shù)債務(wù)的重要的原因——設(shè)計(jì)壞味和重構(gòu)認(rèn)識(shí)不足。

首先要明確軟件設(shè)計(jì)原則

  • 抽象原則:通過(guò)精簡(jiǎn)和概括來(lái)簡(jiǎn)化實(shí)體:精簡(jiǎn)指的是刪除不必要的細(xì)節(jié),概括是找出并定義重要的通用特征。

  • 非循環(huán)依賴原則:包之間的關(guān)系不可形成循環(huán)。

  • 不自我重復(fù)原則:在詳細(xì)設(shè)計(jì)中,設(shè)計(jì)實(shí)體和代碼和重復(fù)可能表現(xiàn)為類(lèi)型名重復(fù)和實(shí)現(xiàn)重復(fù)。

  • 封裝原則:通過(guò)隱藏抽象的實(shí)現(xiàn)細(xì)節(jié)和隱藏變化等方法實(shí)現(xiàn)關(guān)注點(diǎn)分離和信息隱藏。

  • 信息隱藏原則:找出棘手或可能變化的設(shè)計(jì)決策,并創(chuàng)建合適的模塊或類(lèi)型來(lái)對(duì)其他模塊或類(lèi)型隱藏這些決策。

  • 保持簡(jiǎn)單原則:簡(jiǎn)潔是軟件系統(tǒng)設(shè)計(jì)的重要目標(biāo),應(yīng)避免引入不必要的復(fù)雜性。

  • 里氏替換原則:所有的子類(lèi)型都必須至少提供超類(lèi)型承諾的行為且對(duì)每個(gè)超類(lèi)型的引用都可替換成子類(lèi)型實(shí)例。

  • 層次接口原則:使用分類(lèi)、概括、替換、排序等方法以層次方式組織對(duì)抽象。

  • 模塊化原則:通過(guò)集中和分解等手法創(chuàng)建高內(nèi)聚、低耦合的抽象。

  • 開(kāi)閉原則:類(lèi)型應(yīng)對(duì)擴(kuò)展開(kāi)放,對(duì)修改關(guān)閉。具體是模塊應(yīng)該能夠在不修改代碼情況下支持新需求。

  • 單一職責(zé)原則:絕不應(yīng)有多個(gè)導(dǎo)致類(lèi)需要修改的原因,如修改一個(gè)成員可能影響類(lèi)的其他不相關(guān)職責(zé),導(dǎo)致類(lèi)難以維護(hù)。

  • 變化封裝原則:倡導(dǎo)一種信息隱藏方式,建議將可能發(fā)生變化的概念封裝起來(lái)。很多設(shè)計(jì)模式都體現(xiàn)了這種設(shè)計(jì)原則,如策略模式、橋梁模式、觀察者模式。

我們從設(shè)計(jì)的角度來(lái)看代碼時(shí),要遵循六要素:

軟件設(shè)計(jì),那些你不知道的事

了解完設(shè)計(jì)原則和六要素后,我們?cè)賮?lái)看設(shè)計(jì)壞味。

軟件設(shè)計(jì),那些你不知道的事

本文中每種壞味我們只選其中一例做具體說(shuō)明。

抽象型壞味

抽象原則倡導(dǎo)通過(guò)精簡(jiǎn)和概括來(lái)簡(jiǎn)化實(shí)體:精簡(jiǎn)指的是刪除不必要的細(xì)節(jié),而概括指的是找出并定義通過(guò)的重要特征。交通標(biāo)志是用于交流的抽象示例,而數(shù)字符號(hào)和編程語(yǔ)言是用于解決問(wèn)題的抽象示例。

軟件設(shè)計(jì),那些你不知道的事

缺失抽象

使用一系列數(shù)據(jù)或者編碼字符串,而不創(chuàng)建類(lèi)或者接口時(shí)會(huì)產(chǎn)生這種壞味

  1. 概念

  • 應(yīng)用抽象原則的一種實(shí)現(xiàn)手法是創(chuàng)建概念邊界清晰,身份唯一的實(shí)體。由于沒(méi)有創(chuàng)建抽象來(lái)表示實(shí)體,而是使用基本數(shù)據(jù)類(lèi)型或編碼字符串等原始數(shù)據(jù)來(lái)表示它,這違反了抽象原則,將這種壞味稱為缺失抽象(Missing Abstraction)。不必要的抽象也違反了模塊化原則。

  1. 潛在原因

  • 未做重復(fù)的設(shè)計(jì)分析

  • 未重構(gòu)

  • 錯(cuò)誤的將重點(diǎn)放在細(xì)微的性能改善上

  1. 示例

  • 在JDK1.0中方法printStackTrace()以字符串的方式將棧跟蹤打印到標(biāo)準(zhǔn)錯(cuò)誤流。

  • 在需要以編程方式訪問(wèn)棧跟蹤元素的客戶程序中,必須要編程代碼來(lái)獲取數(shù)據(jù),如行號(hào)等,由于客戶程度依賴這種字符串格式,JDK設(shè)計(jì)人員只能在后續(xù)版本中兼容這種格式了。

軟件設(shè)計(jì),那些你不知道的事

重構(gòu)建議:從Jdk1.4起對(duì)JAVA的API進(jìn)行了改進(jìn),StackTraceElement類(lèi)就是原來(lái)設(shè)計(jì)中缺失的對(duì)象。

軟件設(shè)計(jì),那些你不知道的事

  1. 別名

  • 基本類(lèi)型偏執(zhí):使用基本類(lèi)型對(duì)日期、金額進(jìn)行編碼,而不創(chuàng)建類(lèi)時(shí),將引發(fā)這種壞味。

  • 數(shù)據(jù)泥團(tuán):在很多地方同事使用一系列數(shù)據(jù)項(xiàng),而不創(chuàng)建類(lèi)時(shí),將引發(fā)這種壞味。

  1. 現(xiàn)實(shí)考慮

  • 避免過(guò)度設(shè)計(jì):有時(shí)候,實(shí)體只是數(shù)據(jù)元素,沒(méi)有任何相關(guān)聯(lián)的行為。這種情況下使用類(lèi)或者接口來(lái)表示它們可能導(dǎo)致過(guò)度設(shè)計(jì)。

封裝型壞味

封裝原則倡導(dǎo)通過(guò)隱藏抽象的實(shí)現(xiàn)細(xì)節(jié)和隱藏變化等手法實(shí)現(xiàn)關(guān)注的分離和信息隱藏。比如開(kāi)車(chē)必須知道發(fā)動(dòng)機(jī)原理嗎?

軟件設(shè)計(jì),那些你不知道的事


不充分的封裝

對(duì)于抽象的一個(gè)或多個(gè)成員,聲明的訪問(wèn)權(quán)限超過(guò)了實(shí)際需求時(shí),將導(dǎo)致這種壞味。例如,將字段聲明為公有的類(lèi)就存在「不充分封裝」壞味。

  1. 概念

  • 封裝的原則是將接口和實(shí)現(xiàn)分離,以便能獨(dú)立修改。這種關(guān)注點(diǎn)分離,讓客戶程序只依賴抽象的接口,而對(duì)它們隱藏具體實(shí)現(xiàn)。修改實(shí)現(xiàn)不影響客戶程序。對(duì)抽象的內(nèi)部隱藏的不充分稱為不充分的封裝(Deficient Encapsulation)。

  1. 潛在原因

  • 為方便測(cè)試

  • 在面向?qū)ο笾胁捎眠^(guò)程思維

  • 快速交付

  1. 示例

  • 來(lái)看看java.lang.System,in、out、err都被聲明成final,但可以通過(guò)java.lang.System的setIn、setOut、setErr分別賦值。任何代碼都能很方便的使用它們,比如System.out.println();

  • PrintStream是java 1.0就有的,只支持8位的ASCII值,Java1.1出的PrintWriter支持Unicode,然而就是因?yàn)閼?yīng)用程序都能直接使用PrintStream來(lái)訪問(wèn)PrintStream的方法,根本不能摒棄PrintStream類(lèi)。

軟件設(shè)計(jì),那些你不知道的事

  1. 重構(gòu)建議:Java 1.6引入了java.io.Console類(lèi),他提供了用于訪問(wèn)基于字符的控制臺(tái)的方法。reader()、writer()來(lái)獲取Console相關(guān)的Writer和Reader對(duì)象。

  2. 別名

  • 可隱藏的公有屬性、方法

  • 未封裝的類(lèi)

  • 包含未參數(shù)化方法的類(lèi)

  1. 現(xiàn)實(shí)考慮

  • 嵌套或匿名類(lèi)中過(guò)于寬松的訪問(wèn)性

  • 性能考慮:比如前面說(shuō)的java.lang.System

模塊化壞味

模塊化原則倡導(dǎo)利用集中和分解等手法創(chuàng)建高內(nèi)聚、低耦合的抽象。

軟件設(shè)計(jì),那些你不知道的事

拆散的模塊化

應(yīng)集中放在一個(gè)抽象中的數(shù)據(jù)和方法分散在多個(gè)抽象中時(shí),將導(dǎo)致這種壞味。表現(xiàn)為類(lèi)被用作數(shù)據(jù)容器沒(méi)有任何方法、類(lèi)的方法更多的被其他類(lèi)的成員調(diào)用。

  1. 概念
    一種重要的模塊化實(shí)現(xiàn)手法是「將相關(guān)的數(shù)據(jù)和方法集中在一起」。如果抽象中只包含數(shù)據(jù)成員,而操作這些數(shù)據(jù)成員的方法位于其他抽象中,它就違反了這種實(shí)現(xiàn)手法,存在「拆散的模塊化」壞味。稱為拆散的模塊化(Broken Modularization)。

  2. 潛在原因

  • 以過(guò)程思維使用面向?qū)ο笳Z(yǔ)言

  • 不熟悉既有設(shè)計(jì)

  1. 重構(gòu)建議
    對(duì)于包含大量數(shù)據(jù)類(lèi)的過(guò)程型設(shè)計(jì),可采用重構(gòu)手法“將過(guò)程型設(shè)計(jì)轉(zhuǎn)換為對(duì)象”。

  2. 別名

  • 被動(dòng)地存儲(chǔ)數(shù)據(jù)的類(lèi)

  • 數(shù)據(jù)類(lèi)

  • 數(shù)據(jù)記錄

  • 記錄類(lèi)

  • 數(shù)據(jù)容器

  • 錯(cuò)位的操作

  • 依戀情結(jié)

  • 錯(cuò)位的控制

  1. 現(xiàn)實(shí)考慮

  • 自動(dòng)生成的代碼

  • 數(shù)據(jù)傳輸對(duì)象

  • 層次型壞味

  • 層次結(jié)構(gòu)原則倡導(dǎo)采用分類(lèi)、歸并、替換和排序等手法以層次方式組織抽象。比如地球上的870萬(wàn)種生物。

軟件設(shè)計(jì),那些你不知道的事

缺失的層次結(jié)構(gòu)

代碼片段使用條件邏輯來(lái)顯式管理行為變化,而原本可以創(chuàng)建一個(gè)層次目錄,并使用它來(lái)封裝這些變化,會(huì)產(chǎn)生這種壞味

  1. 概念

  • 基于類(lèi)型碼的switch語(yǔ)句(或串接的if-else語(yǔ)句)是最著名的設(shè)計(jì)壞味之一。

  • 使用類(lèi)型碼來(lái)處理行為變化表明沒(méi)有進(jìn)行有意義的分類(lèi),導(dǎo)致設(shè)計(jì)中缺少相應(yīng)的層次結(jié)構(gòu)。稱為缺失層次結(jié)構(gòu)(Missing Hierarchy)。

  1. 潛在原因

  • 錯(cuò)誤的采用過(guò)于簡(jiǎn)單的設(shè)計(jì)

  • 過(guò)程型設(shè)計(jì)思維

  • 忽視了繼承也是一種設(shè)計(jì)手法

  1. 示例

  • 串接的if else語(yǔ)句顯示的檢查類(lèi)型AbstractButton,JToolBar和JTextCompont并在各種條件下調(diào)用方法getMargin(),這種造成的情況是將來(lái)可能在代碼中的其他地方也會(huì)出現(xiàn)。

軟件設(shè)計(jì),那些你不知道的事

  1. 重構(gòu)建議

  • 如果條件檢查中的多個(gè)實(shí)現(xiàn)調(diào)用方法相同,可引入相關(guān)的接口來(lái)抽象共同的協(xié)議。

  • 如果代碼中包含可轉(zhuǎn)換為類(lèi)的條件語(yǔ)句,可采用重構(gòu)手法“提取層次結(jié)構(gòu)”來(lái)創(chuàng)建一個(gè)類(lèi)層次結(jié)構(gòu),其中每個(gè)類(lèi)都表示條件檢查中的一種情形。

  1. 別名

  • 標(biāo)記類(lèi)

  • 繼承缺位

  • 緊縮的類(lèi)型層次結(jié)構(gòu)

  • 內(nèi)嵌功能

  1. 現(xiàn)實(shí)考慮

  • 與外部交互

——————————————————分割線——————————————————

我是小微,專注微服務(wù)技術(shù)分享,致力挖掘更多“高、精、全”的微服務(wù)知識(shí)分享給大家。

我的微信:weiweiweiblack (備注:51CTO )

微信公號(hào):黑少微服務(wù),“分享技術(shù),熱愛(ài)生活”,歡迎關(guān)注

另外有需要云服務(wù)器可以了解下創(chuàng)新互聯(lián)cdcxhl.cn,海內(nèi)外云服務(wù)器15元起步,三天無(wú)理由+7*72小時(shí)售后在線,公司持有idc許可證,提供“云服務(wù)器、裸金屬服務(wù)器、高防服務(wù)器、香港服務(wù)器、美國(guó)服務(wù)器、虛擬主機(jī)、免備案服務(wù)器”等云主機(jī)租用服務(wù)以及企業(yè)上云的綜合解決方案,具有“安全穩(wěn)定、簡(jiǎn)單易用、服務(wù)可用性高、性價(jià)比高”等特點(diǎn)與優(yōu)勢(shì),專為企業(yè)上云打造定制,能夠滿足用戶豐富、多元化的應(yīng)用場(chǎng)景需求。

網(wǎng)頁(yè)名稱:軟件設(shè)計(jì),那些你不知道的事-創(chuàng)新互聯(lián)
文章出自:http://aaarwkj.com/article40/dpidho.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供關(guān)鍵詞優(yōu)化、ChatGPT、網(wǎng)站內(nèi)鏈、軟件開(kāi)發(fā)商城網(wǎng)站、動(dòng)態(tài)網(wǎng)站

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)

網(wǎng)站優(yōu)化排名
国产三级在线观看视频| 午夜福利院在线观看免费| 男女性情视频免费大全网站| 最新国产不卡一区二区| 99热这里只有精品在线| 精品亚洲第一区二区免费在线| 午夜在线观看成人av| 国产尹人99大香蕉| 欧美日韩国产综合一区二区| 国产精品精品国产一区二区| 日韩欧美一区二区三级| 日本免费一区二区三区手机在线| 九九久久精品久久久精品| 亚洲精品在线观看日韩欧美| 成人黄色动作片在线观看| 97在线观看视频免费| 成人午夜性色福利视频| 97免费在线视频观看| 午在线亚洲男人午在线| 午夜在线观看视频免费| 精品欧美日韩国产一区| 国产成人原创免费观看| 日本东京热在线免费观看| 一本色桃子精品久久中文字幕| 欧美欧美欧美欧美一二三区| 国产69精品久久久久久人| 精品欧美激情精品一区| 国产亚洲精品久久久久久| 韩国午夜理伦三级好看| 国产一区二区三区在线精品专区| 日本高清免费播放一区二区| 青青草老司机在线视频| 欧美日韩黄色的三级视频| 国产三级伦理在线播放| 亚洲成综合人在线播放| 黄色录像一级大片中国的 | 人妖系列中文字幕欧美系列| 免费高清av中文字幕| 国产原创av剧情在线观看| 日韩国产传媒在线精品| 日本久久高清免费观看|