国产精品电影_久久视频免费_欧美日韩国产激情_成年人视频免费在线播放_日本久久亚洲电影_久久都是精品_66av99_九色精品美女在线_蜜臀a∨国产成人精品_冲田杏梨av在线_欧美精品在线一区二区三区_麻豆mv在线看

代碼過度設計,真的有意義嗎?

開發 前端
Keep it simple, stupid,保持簡單、愚蠢。提醒我們大多數系統,與其變得復雜,保持簡單能讓系統運行更好。越資深的人,越覺得這大有道理。因為大佬們見識過因為復雜而引發的各種問題。

1、過度設計有意義嗎?

看著自己每次根據設計原則及模式的代碼重構,雖效果不錯,但也自省:如果我的每段代碼都這么寫,是不是過度設計?把握設計的度,需長久錘煉。行業也總結了很多原則,幫助我們把握設計的度。它們是一種思考方法、一種行為準則。

2、KISS

Keep it simple, stupid,保持簡單、愚蠢。提醒我們大多數系統,與其變得復雜,保持簡單能讓系統運行更好。越資深的人,越覺得這大有道理。因為大佬們見識過因為復雜而引發的各種問題。堆太多功能,調整起來就很費勁:

  • ? 有現成庫,就不自己寫
  • ? 能用文本做協議,就別用二進制
  • ? 方法越短小精悍越好
  • ? 能把一個基本流程打通,軟件就能發布,無需那么多功能(MVP)

真是吸引crud boy,但無法指導具體工作。啥叫保持簡單,怎么就叫復雜?這都沒標準。有人基于自己的理解給具體原則:

3、YAGNI

You aren’t gonna need it,你用不著它。如非必要,勿增功能。軟件設計對抗的是需求規模:

  • ? 通過努力,讓軟件在需求規模膨脹之后,依然能平穩發展
  • ? 努力控制需求規模

很多需求不需要做。很多產品經理以為很重要的功能實際上是沒什么用的。真正重要的功能大約只占20%。做了更多的功能,并不會得到更多的回報,但是,做了更多的功能,軟件本身卻會不斷地膨脹,越難維護。

所以,在現實經常看到一些功能簡單的東西不斷涌現,去顛覆更復雜東西。如Word強大,但只是個寫字工具,重點排版功能都用得少。而Markdown簡單地讓我們專注寫內容,而且簡單的幾個排版標記在日常溝通中就完全夠用。盡量可能不去做不該做的事,從源頭堵住問題。

4、DRY

Don’t repeat yourself,不要重復自己。在一個系統中,每一處知識都必須有單一、明確、權威地表述。Every piece of knowledge must have a single, unambiguous, authoritative representation within a system.

即不要做cv工程師。這還遠遠不夠,DRY針對的是你對知識和意圖的復制:在兩個不同地方的兩樣東西表達形式不同,但表達內容卻可能相同。如下打印賬戶信息:

public void printBalance(final Account account) {
System.out.printf("Debits: %10.2f\n", account.getDebits());
System.out.printf("Credits: %10.2f\n", account.getCredits());
if (account.getFees() < 0) {
System.out.printf("Fees: %10.2f-\n", -account.getFees());
} else {
System.out.printf("Fees: %10.2f\n", account.getFees());
}

System.out.printf(" ----\n");

if (account.getBalance() < 0) {
System.out.printf("Balance: %10.2f-\n", -account.getBalance());
} else {
System.out.printf("Balance: %10.2f\n", account.getBalance());
}
}

這段隱藏一些重復。如對負數的處理顯然是復制的,可通過增加一個方法消除:

String formatValue(final double value) {
String result = String.format("%10.2f", Math.abs(value));
if (value < 0) {
return result + "-";
} else {
return result + " ";
}
}

void printBalance(final Account account) {
System.out.printf("Debits: %10.2f\n", account.getDebits());
System.out.printf("Credits: %10.2f\n", account.getCredits());
System.out.printf("Fees:%s\n", formatValue(account.getFees()));
System.out.printf(" ----\n");
System.out.printf("Balance:%s\n", formatValue(account.getBalance()));
}

數字字段格式反復出現,不過,格式與我們抽取出來的方法一致,復用:

String formatValue(final double value) {
String result = String.format("%10.2f", Math.abs(value));
if (value < 0) {
return result + "-";
} else {
return result + " ";
}
}

void printBalance(final Account account) {
System.out.printf("Debits: %s\n", formatValue(account.getDebits()));
System.out.printf("Credits: %s\n", formatValue(account.getCredits()));
System.out.printf("Fees:%s\n", formatValue(account.getFees()));
System.out.printf(" ----\n");
System.out.printf("Balance:%s\n", formatValue(account.getBalance()));
}

打印格式其實也重復,如果我要在標簽和金額之間加一個空格,相關的代碼都要改,所以,這也是一個可以消除的重復:

String formatValue(final double value) {
String result = String.format("%10.2f", Math.abs(value));
if (value < 0) {
return result + "-";
} else {
return result + " ";
}
}

void printLine(final String label, final String value) {
System.out.printf("%-9s%s\n", label, value);
}

void reportLine(final String label, final double value) {
printLine(label + ":", formatValue(value));
}

void printBalance(final Account account) {
reportLine("Debits", account.getDebits());
reportLine("Credits", account.getCredits());
reportLine("Fees", account.getFees());
System.out.printf(" ----\n");
reportLine("Balance", account.getBalance());
}

重構后:

  • ? 改金額打印格式,就去改formatValue
  • ? 改標簽格式,就去改reportLine

有人說這種調整粒度太小。如你這樣感覺,證明你看問題的粒度太大。品味這個修改,與分離關注點和單一職責原則異曲同工:粒度要小。

DRY不局限于寫代碼:

  • ? 注釋和代碼之間存在重復,可以嘗試把代碼寫得更清晰
  • ? 內部API在不同的使用者之間存在重復,可以通過中立格式進行API的定義,然后用工具生成文檔、模擬 API 等等
  • ? 開發人員之間做的事情存在重復,可以建立溝通機制降低重復;……

都是在試圖減少重復,其實也是減少了維護成本。

5、簡單設計

Simple Design,提出者Kent Beck,只包含如下規則,后3條規則是重構方向

(1)通過所有測試

保證系統能按預期工作。怎么知道系統按照預期工作,就需要有配套自動化測試,最好能TDD,最根本的還是要懂設計,否則,你的代碼就是不可測。

(2)消除重復

正如DRY,你得能發現重復,就要會分離關注點

(3)表達出程序員的意圖

編寫有表達性的代碼,這也需要你對“什么是有表達性的代碼”有認識。代碼要說明做什么,而不是怎么做

(4)讓類和方法的數量最小化

讓類和方法的數量最小化,不要過度設計,除非你已看到這必須要做個設計,比如,留下適當擴展點,否則,就不要做。能做出過度設計的前提,是已懂得各種設計,這時才需要用簡單設計的標準對自己約束。所謂簡單設計,對大多數人并不“簡單”。

沒有良好設計,代碼就沒有可測試的接口,TDD就無從談起。不懂設計,重構就只是簡單提取方法,改改名字,對代碼的改進相當有限。

簡單設計的前提是,把編程基礎打牢。片面地追求敏捷實踐,而忽視基本功,是舍本逐末。

責任編輯:武曉燕 來源: JavaEdge
相關推薦

2011-08-23 09:00:47

可用性五個九

2016-04-13 10:52:12

2015-04-23 16:21:23

2019-01-24 10:23:58

Web前端密碼加密

2016-02-17 09:06:42

代碼注釋代碼規范

2011-09-09 10:31:40

Xen虛擬化linux內核

2022-02-28 22:52:56

混合云工具技術

2022-07-13 17:56:09

Bug率產品經理系數

2021-02-19 09:45:50

Python面向對象代碼

2021-03-04 13:25:22

Python面向對象代碼

2021-04-06 11:21:50

Python面向對象代碼

2014-05-04 10:06:56

數據收集

2024-04-19 11:34:10

數據中心

2020-11-03 10:50:09

代碼

2013-05-20 10:09:19

過時應用遷移云計算

2020-06-04 08:05:06

物聯網客戶見解IOT

2014-12-24 10:03:26

融合基礎設施

2022-12-12 17:42:38

人工智能預測性維護智能建筑

2016-02-17 10:01:36

編程代碼注釋

2021-10-28 15:02:16

OpenHarmony微納衛星
點贊
收藏

51CTO技術棧公眾號

国产成人精品免费视频| 伊人夜夜躁av伊人久久| 国产91免费观看| 欧美经典一区| 亚洲色图av在线| 人人草在线视频| 欧美xfplay| 日本孕妇大胆孕交无码| 欧美日韩精品是欧美日韩精品| 免费全黄无遮挡裸体毛片| 久久久国产精华| 午夜dv内射一区二区| yiren22亚洲综合伊人22| 精品国产一区二区三区成人影院| 国产福利一区二区三区视频| av电影一区二区| 欧美性一二三区| 国内精品国产三级国产在线专| 男女av免费观看| 在线国产伦理一区| 99亚洲一区二区| 成人自拍爱视频| 亚洲欧美一区在线| yellow视频在线观看一区二区| 性xxxx欧美老肥妇牲乱| 91精品视频在线免费观看| 国产精品久久久久久久久妇女| 国产精品视频资源| 久久国产影院| 91gao视频| 99热免费精品| 水蜜桃亚洲一二三四在线| 青青草国产精品亚洲专区无| 亚洲一区三区| 风间由美一区二区三区在线观看| 日韩美女爱爱视频| 国产日韩精品视频一区| 激情五月色综合亚洲小说| 亚洲欧美国产77777| 最猛黑人系列在线播放| 国产免费又粗又猛又爽| 老牛国产精品一区的观看方式| 国内精品久久久久| 五月婷婷深爱五月| www.欧美三级电影.com| 蜜臀av在线播放| 一区三区二区视频| 精品精品精品| 亚洲一区二区久久久久久久| 亚洲在线成人| 日本wwww视频| 午夜精品影院在线观看| 国产网友自拍视频导航网站在线观看| 日韩欧美自拍偷拍| 日本一区二区三区视频在线看 | 天天天干夜夜夜操| 精品美女久久久久久免费| 羞羞的网站在线观看| 日韩视频免费看| 888久久久| 欧美无砖专区免费| 日韩欧美在线观看视频| 欧美韩国一区| 国产精品日本一区二区| 加勒比av一区二区| 日韩精品视频在线观看视频| 一区视频在线看| 精品国产自在精品国产浪潮 | 涩涩涩视频在线观看| 日韩理论片网站| 久久99导航| 中文精品久久| 青青草99啪国产免费| 原纱央莉成人av片| 欧美日韩国产一级| 黄色一级一级片| 久久99久久久久| 91九色蝌蚪嫩草| 中文字幕一区二区av| 成人有码在线视频| 少妇一区二区视频| 久久久999精品免费| 另类视频在线| 亚洲国产日韩一级| 色影视在线视频资源站| 白白色 亚洲乱淫| 蜜臀久久99精品久久久酒店新书| 狠狠色丁香久久婷婷综合_中 | 色综合桃花网| 日韩欧美的一区二区| 男女午夜视频在线观看| 成人亚洲精品久久久久软件| 天堂av在线中文| 国产精品夜夜嗨| 丁香六月激情网| 午夜精品一区在线观看| 亚洲视频在线观看免费| 国产欧美啪啪| 亚洲免费久久| 欧美天天综合色影久久精品| 国产第一亚洲| 色综合电影网| 狠狠干狠狠久久| 精品在线网站观看| 青青草视频在线免费播放| 在线电影一区二区三区| 日韩a一区二区| 久久久精品麻豆| 国产精品偷拍| 高清亚洲成在人网站天堂| 欧洲亚洲视频| 亚洲 日韩 国产第一| 国产一区二区三区91| 国产精品国产福利国产秒拍 | 亚洲欧美国产日韩综合| 亚洲成人av中文字幕| 欧美女激情福利| 男人天堂午夜在线| 亚洲人成网在线播放| 乱人伦精品视频在线观看| av二区在线| 97av自拍| 欧美色手机在线观看| 国产精品久久久乱弄| 91破解版在线看| 国产精品久久久久久超碰| 成人欧美一区二区三区黑人麻豆| 欧美专区一区| 北条麻妃av高潮尖叫在线观看| 日韩在线视频线视频免费网站| 精品一区二区三区免费播放| 678在线观看视频| 亚洲制服中文| 亚洲国产精品久久| 久久国产精品99久久久久久老狼 | 一本久久a久久免费精品不卡| 成人毛片免费看| 在线免费观看你懂的| 成人黄色免费片| 欧美日韩日本国产| 综合激情在线| 国产区在线看| 中文字幕av导航| 亚洲偷欧美偷国内偷| 成人激情av网| 蜜桃在线一区| 免费白浆视频| 999国内精品视频在线| 欧美日韩国产美女| 欧美a级理论片| 日韩欧国产精品一区综合无码| 黑森林福利视频导航| 欧美在线免费视频| 日本道精品一区二区三区 | 丁香花高清在线观看完整版| 在线播放 亚洲| 欧美另类在线观看| 亚洲资源中文字幕| 亚洲精品美女| 欧美性理论片在线观看片免费| 日本精品一区二区三区四区| 91av在线国产| 欧美色综合影院| 国产精品一区二区不卡| 国产福利资源一区| 国产女人在线观看| 亚洲一区二区三区涩| 丝袜亚洲欧美日韩综合| 久久精品欧美一区二区三区麻豆| 亚洲自拍都市欧美小说| 久久免费看视频| 免费av在线一区二区| 欧美日本国产视频| 国产jizzjizz一区二区| 日本韩国欧美超级黄在线观看| 在线视频99| 中文字幕一区二区三区四区久久 | 欧美v亚洲v综合v国产v仙踪林| av在线免费观看国产| 国产美女久久精品| 久久久亚洲国产| 日韩在线观看高清| 影音先锋男人资源在线| av一区二区三区免费观看| 欧美亚州一区二区三区| 欧美日韩国产不卡| 久久综合九色综合欧美亚洲| 91精品久久久久久久久久不卡| 午夜伦理福利在线| 在线观看av网站永久| 国产精品第157页| 亚洲一区二区三区视频| 亚洲性av网站| 欧美亚洲图片小说| 国产日产欧美一区| 丝袜亚洲另类丝袜在线| 香蕉久久夜色精品国产使用方法| 国产精品高潮久久久久无| 98色花堂精品视频在线观看| 成人黄色免费电影|