阿里巴巴制定了这 16 条
轉(zhuǎn)載自? ?阿里巴巴制定了這 16 條
本文內(nèi)容整理自《阿里巴巴Java開(kāi)發(fā)手冊(cè) 1.4.0》,獲取完整版請(qǐng)?jiān)诠娞?hào)后臺(tái)回復(fù)關(guān)鍵字:手冊(cè)。
?
1、【強(qiáng)制】存儲(chǔ)方案和底層數(shù)據(jù)結(jié)構(gòu)的設(shè)計(jì)獲得評(píng)審一致通過(guò),并沉淀成為文檔。
說(shuō)明:有缺陷的底層數(shù)據(jù)結(jié)構(gòu)容易導(dǎo)致系統(tǒng)風(fēng)險(xiǎn)上升,可擴(kuò)展性下降,重構(gòu)成本也會(huì)因歷史數(shù)據(jù)遷移和系統(tǒng)平滑過(guò)渡而陡然增加,所以,存儲(chǔ)方案和數(shù)據(jù)結(jié)構(gòu)需要認(rèn)真地進(jìn)行設(shè)計(jì)和評(píng)審,生產(chǎn)環(huán)境提交執(zhí)行后,需要進(jìn)行 double check。
正例:評(píng)審內(nèi)容包括存儲(chǔ)介質(zhì)選型、表結(jié)構(gòu)設(shè)計(jì)能否滿(mǎn)足技術(shù)方案、存取性能和存儲(chǔ)空間能否滿(mǎn)足業(yè)務(wù)發(fā)展、表或字段之間的辯證關(guān)系、字段名稱(chēng)、字段類(lèi)型、索引等;數(shù)據(jù)結(jié)構(gòu)變更(如在原有表中新增字段)也需要進(jìn)行評(píng)審?fù)ㄟ^(guò)后上線(xiàn)。
2、【強(qiáng)制】在需求分析階段,如果與系統(tǒng)交互的 User 超過(guò)一類(lèi)并且相關(guān)的 User Case 超過(guò) 5 個(gè),使用用例圖來(lái)表達(dá)更加清晰的結(jié)構(gòu)化需求。
3、【強(qiáng)制】如果某個(gè)業(yè)務(wù)對(duì)象的狀態(tài)超過(guò) 3 個(gè),使用狀態(tài)圖來(lái)表達(dá)并且明確狀態(tài)變化的各個(gè)觸發(fā)條件。
說(shuō)明:狀態(tài)圖的核心是對(duì)象狀態(tài),首先明確對(duì)象有多少種狀態(tài),然后明確兩兩狀態(tài)之間是否存在直接轉(zhuǎn)換關(guān)系,再明確觸發(fā)狀態(tài)轉(zhuǎn)換的條件是什么。
正例:淘寶訂單狀態(tài)有已下單、待付款、已付款、待發(fā)貨、已發(fā)貨、已收貨等。比如已下單與已收貨這兩種狀態(tài)之間是不可能有直接轉(zhuǎn)換關(guān)系的。
4、【強(qiáng)制】如果系統(tǒng)中某個(gè)功能的調(diào)用鏈路上的涉及對(duì)象超過(guò) 3 個(gè),使用時(shí)序圖來(lái)表達(dá)并且明確各調(diào)用環(huán)節(jié)的輸入與輸出。
說(shuō)明:時(shí)序圖反映了一系列對(duì)象間的交互與協(xié)作關(guān)系,清晰立體地反映系統(tǒng)的調(diào)用縱深鏈路。
5、【強(qiáng)制】如果系統(tǒng)中模型類(lèi)超過(guò) 5 個(gè),并且存在復(fù)雜的依賴(lài)關(guān)系,使用類(lèi)圖來(lái)表達(dá)并且明確類(lèi)之間的關(guān)系。
說(shuō)明:類(lèi)圖像建筑領(lǐng)域的施工圖,如果搭平房,可能不需要,但如果建造螞蟻 Z 空間大樓,肯定需要詳細(xì)的施工圖。
6、【強(qiáng)制】如果系統(tǒng)中超過(guò) 2 個(gè)對(duì)象之間存在協(xié)作關(guān)系,并且需要表示復(fù)雜的處理流程,使用活動(dòng)圖來(lái)表示。
說(shuō)明:活動(dòng)圖是流程圖的擴(kuò)展,增加了能夠體現(xiàn)協(xié)作關(guān)系的對(duì)象泳道,支持表示并發(fā)等。
7、【推薦】需求分析與系統(tǒng)設(shè)計(jì)在考慮主干功能的同時(shí),需要充分評(píng)估異常流程與業(yè)務(wù)邊界。
反例:用戶(hù)在淘寶付款過(guò)程中,銀行扣款成功,發(fā)送給用戶(hù)扣款成功短信,但是支付寶入款時(shí)由于斷網(wǎng)演練產(chǎn)生異常,淘寶訂單頁(yè)面依然顯示未付款,導(dǎo)致用戶(hù)投訴。
8、【推薦】類(lèi)在設(shè)計(jì)與實(shí)現(xiàn)時(shí)要符合單一原則。
說(shuō)明:單一原則最易理解卻是最難實(shí)現(xiàn)的一條規(guī)則,隨著系統(tǒng)演進(jìn),很多時(shí)候,忘記了類(lèi)設(shè)計(jì)的初衷。
9、【推薦】謹(jǐn)慎使用繼承的方式來(lái)進(jìn)行擴(kuò)展,優(yōu)先使用聚合/組合的方式來(lái)實(shí)現(xiàn)。
說(shuō)明:不得已使用繼承的話(huà),必須符合里氏代換原則,此原則說(shuō)父類(lèi)能夠出現(xiàn)的地方子類(lèi)一定能夠出現(xiàn),比如,“把錢(qián)交出來(lái)”,錢(qián)的子類(lèi)美元、歐元、人民幣等都可以出現(xiàn)。
10、【推薦】系統(tǒng)設(shè)計(jì)時(shí),根據(jù)依賴(lài)倒置原則,盡量依賴(lài)抽象類(lèi)與接口,有利于擴(kuò)展與維護(hù)。
說(shuō)明:低層次模塊依賴(lài)于高層次模塊的抽象,方便系統(tǒng)間的解耦。
11、【推薦】系統(tǒng)設(shè)計(jì)時(shí),注意對(duì)擴(kuò)展開(kāi)放,對(duì)修改閉合。
說(shuō)明:極端情況下,交付的代碼都是不可修改的,同一業(yè)務(wù)域內(nèi)的需求變化,通過(guò)模塊或類(lèi)的擴(kuò)展來(lái)實(shí)現(xiàn)。
12、【推薦】系統(tǒng)設(shè)計(jì)階段,共性業(yè)務(wù)或公共行為抽取出來(lái)公共模塊、公共配置、公共類(lèi)、公共方法等,避免出現(xiàn)重復(fù)代碼或重復(fù)配置的情況。
說(shuō)明:隨著代碼的重復(fù)次數(shù)不斷增加,維護(hù)成本指數(shù)級(jí)上升。
13、【推薦】避免如下誤解:敏捷開(kāi)發(fā) = 講故事 + 編碼 + 發(fā)布。
說(shuō)明:敏捷開(kāi)發(fā)是快速交付迭代可用的系統(tǒng),省略多余的設(shè)計(jì)方案,摒棄傳統(tǒng)的審批流程,但核心關(guān)鍵點(diǎn)上的必要設(shè)計(jì)和文檔沉淀是需要的。
反例:某團(tuán)隊(duì)為了業(yè)務(wù)快速發(fā)展,敏捷成了產(chǎn)品經(jīng)理催進(jìn)度的借口,系統(tǒng)中均是勉強(qiáng)能運(yùn)行但像面條一樣的代碼,可維護(hù)性和可擴(kuò)展性極差,一年之后,不得不進(jìn)行大規(guī)模重構(gòu),得不償失。
14、【參考】系統(tǒng)設(shè)計(jì)主要目的是明確需求、理順邏輯、后期維護(hù),次要目的用于指導(dǎo)編碼。
說(shuō)明:避免為了設(shè)計(jì)而設(shè)計(jì),系統(tǒng)設(shè)計(jì)文檔有助于后期的系統(tǒng)維護(hù),所以設(shè)計(jì)結(jié)果需要進(jìn)行分類(lèi)歸檔保存。
15、【參考】設(shè)計(jì)的本質(zhì)就是識(shí)別和表達(dá)系統(tǒng)難點(diǎn),找到系統(tǒng)的變化點(diǎn),并隔離變化點(diǎn)。
說(shuō)明:世間眾多設(shè)計(jì)模式目的是相同的,即隔離系統(tǒng)變化點(diǎn)。
16、【參考】系統(tǒng)架構(gòu)設(shè)計(jì)的目的:
-
確定系統(tǒng)邊界。確定系統(tǒng)在技術(shù)層面上的做與不做。
-
確定系統(tǒng)內(nèi)模塊之間的關(guān)系。確定模塊之間的依賴(lài)關(guān)系及模塊的宏觀輸入與輸出。
-
確定指導(dǎo)后續(xù)設(shè)計(jì)與演化的原則。使后續(xù)的子系統(tǒng)或模塊設(shè)計(jì)在規(guī)定的框架內(nèi)繼續(xù)演化。
-
確定非功能性需求。非功能性需求是指安全性、可用性、可擴(kuò)展性等。
本文內(nèi)容整理自《阿里巴巴Java開(kāi)發(fā)手冊(cè) 1.4.0》,獲取完整版請(qǐng)?jiān)诠娞?hào)后臺(tái)回復(fù)關(guān)鍵字:手冊(cè)。
?
總結(jié)
以上是生活随笔為你收集整理的阿里巴巴制定了这 16 条的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 揭开Java 泛型类型擦除神秘面纱
- 下一篇: 分布式作业 Elastic Job 如何