若想捉大魚揭厚,就得潛入深淵却特。深淵里的魚更有力,也更純凈筛圆。碩大而抽象裂明,且非常美麗√——大衛(wèi)·林奇
1.1 什么是抽象
“抽”是抽離闽晦,“象”是具象,抽象的過程就是從“具象”事物中歸納出共同特征提岔,“抽取”得到一般化概念的過程仙蛉。
1.2 抽象和語言是一體的
CodeReview 過程中命名的重要性:
命名的好壞,在很大程度上反映了我們對一個概念的思考是否清晰碱蒙,我們的抽象是否合理荠瘪,反應(yīng)在代碼上就是,代碼的可讀性赛惩、可理解性是不是良好哀墓,以及我們的設(shè)計是不是到位。
1.3 抽象的層次性
抽象的三個特點:
1.抽象是忽略細節(jié)的
2.抽象代表了共同性質(zhì)
3.抽象具有層次性喷兼。抽象層次越高篮绰,內(nèi)涵越小,外延越大
1.4 軟件中分層抽象無處不在
越是復(fù)雜的問題越需要抽象褒搔,分層是分而治之阶牍,抽象是問題域的合理劃分和概念寓意的表單喷面。
1.5 復(fù)雜代碼是抽象的缺失
復(fù)雜代碼是典型的代碼壞味道,其本質(zhì)問題就是抽象的缺失走孽。
領(lǐng)域模型訓(xùn)練
我們可以對自己工作中的問題域進行建模惧辈,當(dāng)然也可以通過閱讀一些優(yōu)秀源碼背后的模型設(shè)計來學(xué)習(xí)如何抽象、如何建模磕瓷。比如盒齿,我們知道Spring的核心功能是Bean容器,那么在看Spring源碼的時候困食,我們可以著重去看它是如何進行Bean管理的边翁?它使用的核心抽象是什么?不難發(fā)現(xiàn)硕盹,Spring是使用了BeanDefinition符匾、BeanFactory、BeanDefinitionRegistry瘩例、BeanDefinitionReader等核心抽象實現(xiàn)了Bean的定義啊胶、獲取和創(chuàng)建。抓住了這些核心抽象垛贤,我們就抓住了Spring設(shè)計主脈焰坪。