為什么選擇DSL(中)

好的代碼

要說清楚DSL能帶來什么,先要理解需要什么。一份好的代碼咏瑟,應(yīng)該滿足下述屬性(重要程度遞減) :

1.正確

它需要實現(xiàn)當(dāng)前所需的功能拂到,可以正常工作。

2.可擴(kuò)展

對于新的需求码泞,代碼應(yīng)該容易擴(kuò)展兄旬,它的變動成本應(yīng)該盡量小:這個成本應(yīng)該包括設(shè)計、編碼余寥、測試领铐、故障修復(fù)等全流程的成本;

可以想象后端的成本往往比前端要大,特別是缺乏良好設(shè)計的情況下宋舷。一般資源前移绪撵,投入更多的資源在設(shè)計、編碼上祝蝠,是合適的策略音诈。特別是對于注定的大型項目更是如此。但對于前端的投入需要有明確的實施或評判標(biāo)準(zhǔn)绎狭。

3.可讀

可讀和可擴(kuò)展看似會有沖突细溅。想要維護(hù)高度抽象、有良好分層結(jié)構(gòu)的代碼一定需要付出相應(yīng)的學(xué)習(xí)成本儡嘶。它不會那么”好讀”喇聊。即便沖突,也應(yīng)該首先保證擴(kuò)展性蹦狂。

保證擴(kuò)展性的情況下誓篱,代碼結(jié)構(gòu)應(yīng)該良好的組織結(jié)構(gòu),命名應(yīng)該更加準(zhǔn)確凯楔,以便于理解燕鸽。長遠(yuǎn)的看可擴(kuò)展性和可讀性并不沖突,缺乏抽象的代碼既不會好讀更不會容易擴(kuò)展啼辣。

4.沒有多余的部分

不要實現(xiàn)那些還沒有發(fā)生的需求啊研。

如果通過對領(lǐng)域知識的了解,你已經(jīng)知道某些變化方向一定會發(fā)生鸥拧,只是這幾天或者這個版本還不需要實現(xiàn)這些功能党远。那么就需要提前考慮這些變化方向,避免后續(xù)推倒重寫富弦。特別是沟娱,對于架構(gòu)師來說,決不可能也不應(yīng)該對系統(tǒng)的變動和演進(jìn)一無所知腕柜。

這一點描述的實際上是應(yīng)該避免過度設(shè)計济似。相對來說重要性較低矫废。一個事實是,缺乏設(shè)計的代碼比比皆是砰蠢,過度設(shè)計的代碼在實際工作中比較少見蓖扑。

有時正確性被視為外部質(zhì)量,擴(kuò)展性台舱、可讀性和沒有多余部分被視為內(nèi)部質(zhì)量律杠,衡量內(nèi)部質(zhì)量的標(biāo)準(zhǔn)是變動成本,評價外部質(zhì)量可以用客戶需求的滿足度來看竞惋,有些時候也可以用故障率來描述柜去。內(nèi)部、外部質(zhì)量從長遠(yuǎn)看拆宛,是一致的嗓奢。不易擴(kuò)展的代碼,它不可能長期正確浑厚。我們需要時刻牢記“變化”是客戶對軟件最核心的需求蔓罚,沒有之一。


軟件設(shè)計落地遇到的問題

軟件設(shè)計的核心目的是提高系統(tǒng)的可擴(kuò)展性瞻颂。具體的方法很多,高內(nèi)聚/低耦合郑象;XP贡这;SOLID原則;設(shè)計模式厂榛;clean code + refactoring盖矫;TDD;DDD….這個藥方還可以開很長击奶。都非常有道理辈双。但實際落地的過程中,會面臨一些問題柜砾,包括:

1.軟件設(shè)計原則和方法難以有效的大范圍推廣

SOLID\CC\設(shè)計模式\TDD等莫不如是湃望。究其原因:

a)難學(xué)。是對代碼設(shè)計有追求的人其實并不多痰驱;包括喜歡coding的人证芭,也往往對設(shè)計沒有興趣(實現(xiàn)功能和以良好的擴(kuò)展性實現(xiàn),本來就是不同的事情)担映;工作中废士,公司\項目更是未必會給員工大量相關(guān)的培訓(xùn)機(jī)會;何況也未必有合適的老師蝇完;

b)難用官硝。良好設(shè)計帶來的是長遠(yuǎn)的好處矗蕊,而且需要長期的堅持,眼前就要給予相當(dāng)?shù)耐度肟偛皇翘貏e令人愉悅的事氢架。原則的理解傻咖,模式的選擇非常依賴個人的能力,缺乏非常具體標(biāo)準(zhǔn)和具有一定強(qiáng)制力的手段达箍。類似代碼走查没龙,結(jié)對編程這種方法,道理上有用缎玫,但對于大型項目(數(shù)百人)能成功堅持的罕見硬纤。代碼走查,對保證業(yè)務(wù)邏輯可能有用赃磨,但對提升設(shè)計很難說有用筝家。一言以蔽之,沒有標(biāo)準(zhǔn)邻辉。單一職責(zé)溪王,開放封閉都只能是理想。還可以用一些強(qiáng)制手段值骇,比如用自動檢查工具莹菱,度量函數(shù)行數(shù),和圈復(fù)雜度吱瘩,甚至檢查一定程度的重復(fù)代碼道伟。從結(jié)果進(jìn)行約束可以倒逼設(shè)計,但既不能逼出良好的設(shè)計使碾,同時整個系統(tǒng)在邏輯上仍然會缺乏一致性蜜徽;

既難學(xué),且難用票摇,不能形成正向反饋拘鞋,成功推廣自然是緣木求魚。

2. 對人員能力不同要求難以拆分到角色

對于某些系統(tǒng)(比如通信系統(tǒng))矢门,我們希望程序員有下列技能盆色,業(yè)務(wù)能力、軟件設(shè)計能力祟剔、高性能編程能力(對芯片和內(nèi)存系統(tǒng)的親和性)傅事、組織協(xié)調(diào)能力。哪一點做透到都很難峡扩,何況都懂(順便說一句蹭越,別隨便就說自己精通c/c++/Java)。

人類自工業(yè)化以來教届,亞當(dāng)斯密指出的分工帶來效率响鹃,無數(shù)次的被證明有效驾霜,分工合作是正途÷蛑茫可以嘗試去建立學(xué)習(xí)文化粪糙,學(xué)習(xí)型組織,軟件設(shè)計落地寄希望于此就有些一廂情愿了忿项。

如果不能有效的將不能能力需求拆分到角色蓉冈,一定會有某些能力(價值被放棄)。而這些要求要求中轩触,看起來軟件設(shè)計能力是最容易被放棄的寞酿。

但如何有效分解,實際上并不容易脱柱》サ可以考慮建立不同的角色,架構(gòu)師榨为,業(yè)務(wù)分析惨好,軟件設(shè)計,開發(fā)等随闺。但他們之間的工作邊界并不容易厘清日川,前一級的工作內(nèi)容很難有效的傳遞到后一級。須知矩乐,文檔從來都是不靠譜的龄句。

分解對人員能力的要求,帶來的另一個好處是绰精,抵御人員流動,這也是非惩父穑現(xiàn)實的問題笨使。

下一部分講如何以DSL為突破點,并采用相應(yīng)的方法族實現(xiàn)有效良質(zhì)的軟件設(shè)計僚害,并且據(jù)此分解對人員能力要求硫椰,并有效傳遞不同分工間的工作成果。

一個預(yù)警: DSL不是銀彈萨蚕,不是一種能獨立發(fā)揮巨大作用的技術(shù)靶草。它需要豐富友好的其它設(shè)計方法配合,比如包括抽象領(lǐng)域概念建立領(lǐng)域的視圖岳遥,分層奕翔,模塊化(意味著清晰的邊界),以及通過各種方式對系統(tǒng)進(jìn)行有效的拆分和組合浩蓉。它只是眾多工具/方法中的一種派继,但它有希望成為改善軟件設(shè)計的突破點宾袜。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市驾窟,隨后出現(xiàn)的幾起案子庆猫,更是在濱河造成了極大的恐慌,老刑警劉巖绅络,帶你破解...
    沈念sama閱讀 211,376評論 6 491
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件月培,死亡現(xiàn)場離奇詭異,居然都是意外死亡恩急,警方通過查閱死者的電腦和手機(jī)杉畜,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,126評論 2 385
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來假栓,“玉大人寻行,你說我怎么就攤上這事∝揖#” “怎么了拌蜘?”我有些...
    開封第一講書人閱讀 156,966評論 0 347
  • 文/不壞的土叔 我叫張陵,是天一觀的道長牙丽。 經(jīng)常有香客問我简卧,道長,這世上最難降的妖魔是什么烤芦? 我笑而不...
    開封第一講書人閱讀 56,432評論 1 283
  • 正文 為了忘掉前任举娩,我火速辦了婚禮,結(jié)果婚禮上构罗,老公的妹妹穿的比我還像新娘铜涉。我一直安慰自己,他們只是感情好遂唧,可當(dāng)我...
    茶點故事閱讀 65,519評論 6 385
  • 文/花漫 我一把揭開白布芙代。 她就那樣靜靜地躺著,像睡著了一般盖彭。 火紅的嫁衣襯著肌膚如雪纹烹。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,792評論 1 290
  • 那天召边,我揣著相機(jī)與錄音铺呵,去河邊找鬼。 笑死隧熙,一個胖子當(dāng)著我的面吹牛片挂,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 38,933評論 3 406
  • 文/蒼蘭香墨 我猛地睜開眼宴卖,長吁一口氣:“原來是場噩夢啊……” “哼滋将!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起症昏,我...
    開封第一講書人閱讀 37,701評論 0 266
  • 序言:老撾萬榮一對情侶失蹤随闽,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后肝谭,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體掘宪,經(jīng)...
    沈念sama閱讀 44,143評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,488評論 2 327
  • 正文 我和宋清朗相戀三年攘烛,在試婚紗的時候發(fā)現(xiàn)自己被綠了魏滚。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 38,626評論 1 340
  • 序言:一個原本活蹦亂跳的男人離奇死亡坟漱,死狀恐怖鼠次,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情芋齿,我是刑警寧澤腥寇,帶...
    沈念sama閱讀 34,292評論 4 329
  • 正文 年R本政府宣布,位于F島的核電站觅捆,受9級特大地震影響赦役,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜栅炒,卻給世界環(huán)境...
    茶點故事閱讀 39,896評論 3 313
  • 文/蒙蒙 一掂摔、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧赢赊,春花似錦乙漓、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,742評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至秀鞭,卻和暖如春趋观,著一層夾襖步出監(jiān)牢的瞬間扛禽,已是汗流浹背锋边。 一陣腳步聲響...
    開封第一講書人閱讀 31,977評論 1 265
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點兒被人妖公主榨干…… 1. 我叫王不留编曼,地道東北人豆巨。 一個月前我還...
    沈念sama閱讀 46,324評論 2 360
  • 正文 我出身青樓,卻偏偏與公主長得像掐场,于是被迫代替她去往敵國和親往扔。 傳聞我的和親對象是個殘疾皇子贩猎,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 43,494評論 2 348

推薦閱讀更多精彩內(nèi)容