24.设计原则
總的來(lái)說(shuō)是高內(nèi)聚低耦合,內(nèi)聚是把變化點(diǎn)進(jìn)行封裝,耦合還是要有的,只是要盡量少,不同內(nèi)聚點(diǎn)的聯(lián)系方式有兩種,一種就是繼承,一種就是組合。組合又分為基于接口組合還是基于類組合,基于接口就可以靈活的改到聚合點(diǎn)的實(shí)現(xiàn),只要符合接口的規(guī)范就可以。
(一)抽象
現(xiàn)實(shí)世界和程序?qū)ο笾g的映射關(guān)系。不是像(相似)建模,是要對(duì)解決的問(wèn)題進(jìn)行抽象建模,要解決的問(wèn)題是可能發(fā)生改變的,所以組織對(duì)象的時(shí)候要考慮把可能的變化封裝起來(lái)。這件事很重要,怎么把現(xiàn)實(shí)問(wèn)題一步步映射成對(duì)象,再到代碼的經(jīng)驗(yàn),就是領(lǐng)域驅(qū)動(dòng)建模了。
(二)封裝變化
業(yè)務(wù)在不斷變化,,想要程序可以持續(xù)使用,就要在需求變化時(shí)容易改變程序。可以把變化的東西抽成一個(gè)方法,或者抽成一個(gè)類,取決于粒度。這樣同一個(gè)變化點(diǎn)以后改起來(lái)只要改一個(gè)地方就好。如果變的動(dòng)靜可能會(huì)很大,比如可能會(huì)把整個(gè)類都替換掉,可以把這個(gè)類提供的服務(wù)抽象成個(gè)接口,就可以滿足開(kāi)閉原則,對(duì)擴(kuò)展開(kāi)放,在修改關(guān)閉,設(shè)計(jì)模式就是封裝變化或者是滿足開(kāi)閉原則的經(jīng)驗(yàn)。
?
封裝,接口。
編碼:抽象成方法,如果是重要的領(lǐng)域概念,抽成類。再靈活些抽成接口。模式提供了一些封裝變化的模板,如策略,模板方法。
開(kāi)發(fā)管理:同樣的東西不要重復(fù)實(shí)現(xiàn),引用一處,變更容易。(如UI部門選擇樹(shù),以及從業(yè)務(wù)模塊接口)
架構(gòu):模塊間重復(fù)的邏輯,可以抽出基礎(chǔ)平臺(tái)。
實(shí)現(xiàn):第一步是對(duì)變化封裝。更進(jìn)一步抽象化是關(guān)鍵,更靈活的擴(kuò)展。
?
封裝變化有兩種類的形式,一種是繼承一種是組合。
?
?
?
?
(三)(is a)里氏代換原則
任何基類可以出現(xiàn)的地方,子類也一定可以出現(xiàn)。。
(四)合成優(yōu)于繼承
是抽象,合成比繼承在大部分情況下更適用,和里氏相輔,是實(shí)施規(guī)范。
| 原代碼程序設(shè)計(jì) | ? | 知識(shí)點(diǎn): 1組合和繼承 2在同一層次減少包裝類(包裝類有為想跨層時(shí)才有用) 3.更多可用的接口 4.太深的層次 5.應(yīng)用的靈活性(比如應(yīng)用可以根據(jù)自己的需求要不要向上層暴露底層是分庫(kù)分表的,有些業(yè)務(wù)可能需要知曉分庫(kù)分表-按分表做一些線程劃分,有些應(yīng)用不需要-查詢一些數(shù)據(jù)不關(guān)心這些數(shù)據(jù)都在哪些表里) |
| 新的設(shè)計(jì) | ? |
?
?
(五)基于接口(依賴倒轉(zhuǎn)原則)
要依賴于抽象不要依賴于實(shí)現(xiàn)。開(kāi)放封閉原則是目標(biāo),依賴倒轉(zhuǎn)原則是手段。
A依賴調(diào)用B,A調(diào)用a1接口,B實(shí)現(xiàn)a1接口。從而B依賴于a1。
(六)單一職責(zé)
類,方法,變量都只做一件事,要不名字都沒(méi)辦法起。
不用看類的實(shí)現(xiàn),只看類名,就知道類做什么;不用看方法實(shí)現(xiàn),只看方法名,就知道方法做什么。(注:最多加上注釋,所以引出注釋的程度就是要和名字一起讓別人不用看實(shí)現(xiàn)就可以放心的使用它)引出了單一職責(zé)。
(七)接口隔離原則
不要提供大的總接口。是單一職責(zé)的子集。
每個(gè)類,或者方法都應(yīng)該盡可能少的對(duì)外提供服務(wù),這樣產(chǎn)生對(duì)象改變的原因就會(huì)單一,是封裝變化的一個(gè)更好的保證,變化封的更嚴(yán)實(shí)。
?
軟件要能靈活適應(yīng)變化,組件化,組件可替換,基于接口。
(八)最小可見(jiàn)性(迪米特法則)
一個(gè)軟件實(shí)體應(yīng)該盡量少的和其它實(shí)體發(fā)生相互作用。通向開(kāi)閉原則的道路。調(diào)用方調(diào)用夠用就可以,被調(diào)用方暴露盡量少的服務(wù)。
轉(zhuǎn)載于:https://www.cnblogs.com/guanpanpan/p/3414407.html
總結(jié)
- 上一篇: opencv中的Mat类型
- 下一篇: 怎么查询局域网内全部电脑IP和mac地址