#寫好業(yè)務(wù)代碼#5.業(yè)務(wù)組件標(biāo)準(zhǔn)化(WCSR+DDD)

本文集說的都是些平凡的小事救崔,但往往是這些小事區(qū)分了產(chǎn)品的偉大與平庸。

1.雜談業(yè)務(wù)組件標(biāo)準(zhǔn)化

(1)感覺自己萌萌噠

前面章節(jié)提到的“開發(fā)環(huán)境標(biāo)準(zhǔn)化”六孵、“工程標(biāo)準(zhǔn)化”、“三方件標(biāo)準(zhǔn)化”都有明確的本今、可量化的標(biāo)準(zhǔn),有標(biāo)準(zhǔn)就可以看護(hù)冠息。

但“與業(yè)務(wù)強(qiáng)相關(guān)”的業(yè)務(wù)組件孕索,就很難找到“標(biāo)準(zhǔn)”——您可能會(huì)說業(yè)界那些架構(gòu)模式、設(shè)計(jì)模式不就是給我們的明燈嗎?舉個(gè)例子唐断,“微服務(wù)”的方法論只說您的產(chǎn)品只要?jiǎng)澐殖闪宋⒎?wù),就可以享受到很多好處恳啥,但是丹诀,您的產(chǎn)品已經(jīng)有了千萬行的存量代碼,怎么劃分呢硝桩?這些架構(gòu)模式就不怎么回答了枚荣。

于是,實(shí)戰(zhàn)中衙伶,業(yè)務(wù)組件因?yàn)闆]有標(biāo)準(zhǔn)害碾,所以就“跟著感覺走”,通常還是跟著“領(lǐng)導(dǎo)的感覺走”芬沉。如果領(lǐng)導(dǎo)沒有編碼經(jīng)驗(yàn)、沒有深入客戶需求笋籽,這種感覺簡直就是災(zāi)難椭员。

圖1

感覺,有兩個(gè)特征:一是主觀性侍芝,二是以自我為中心埋同。所以,跟著感覺走的人和產(chǎn)品咧栗,是不是總覺得自己萌(不)萌(靠)噠(譜)虱肄?

圖2

(2)標(biāo)準(zhǔn)化與場景化的矛盾

再來說說矛盾:標(biāo)準(zhǔn)化強(qiáng)調(diào)軍事化管理,要整齊劃一斟或。場景化強(qiáng)調(diào)具體問題具體分析萝挤,要因材施教。這兩種針鋒相對的流派怜珍,在實(shí)戰(zhàn)中如何取舍與平衡呢凤粗?

想說清這個(gè)問題绘面,筆者先引用《神雕俠侶》中獨(dú)孤求敗的墓志銘:

第一把青鋒長劍——“青鋒長劍揭璃,凌厲剛猛亭罪,無堅(jiān)不摧,弱冠前以之與河朔群雄爭鋒”

第二把紫薇軟劍——“紫薇軟劍情组,三十歲所用,誤傷義士不詳院崇,乃棄之深谷”

第三把玄鐵重劍——“重劍無鋒底瓣,大巧不工,四十年前恃之橫行天下”

第四把腐朽木劍——“四十歲之后拨扶,不滯于物茁肠,草木竹石皆可為劍。自此精修垦梆,漸進(jìn)于無劍勝有劍之境”

圖3

標(biāo)準(zhǔn)化就是定式,是程序猿的“青鋒長劍和紫薇軟劍”托猩。老前輩們總結(jié)出一種的“套路”,這種套路在合適的場景下使用最安全、最穩(wěn)妥鼻百、最大概率的提高新手的勝算。所以因悲,定式一定要學(xué)勺爱,而且要虛心的學(xué)、深入的學(xué)卫旱。

標(biāo)準(zhǔn)化的誤區(qū)是“生搬硬套”围段。初學(xué)者僅僅理解了定式的招式,卻沒有理解定式的心法适贸,“合適的場景”就是定式的心法——只有在這個(gè)特定的場景下使用這個(gè)定式才最合適——筆者工作初期很迷信設(shè)計(jì)模式,把市面上能買到的設(shè)計(jì)模式的書都讀了一遍拜姿,在產(chǎn)品代碼中大量使用設(shè)計(jì)模式,結(jié)果弄巧成拙到后來自己都看不懂自己的代碼谒获。這就是風(fēng)騷的代價(jià)晴埂。。精耐。

圖4

“場景化”就是具體問題具體分析卦停,是程序猿的“玄鐵重劍和腐朽木劍”。這個(gè)階段就是將“定式”爛熟于胸的程序猿惊完,不斷通過一個(gè)個(gè)實(shí)戰(zhàn)案例小槐,對“定式”理解的更加透徹,運(yùn)用的更加靈活自如凿跳。

“場景化”的能力提升似乎沒有更好的辦法控嗜,只有通過實(shí)戰(zhàn)訓(xùn)練和經(jīng)驗(yàn)總結(jié)骡显。

寫到這里,筆者已經(jīng)放棄了從方法論層面進(jìn)行證明與探索了惫谤。Why?

標(biāo)哥的口頭禪:“量變引起質(zhì)變”博助,即當(dāng)代碼規(guī)模數(shù)量級(jí)增長時(shí)痹愚,架構(gòu)面臨的挑戰(zhàn)就會(huì)指數(shù)級(jí)增長蛔糯。只經(jīng)歷過10萬行代碼規(guī)模的程序猿絕無可能看看書就能具備千萬級(jí)代碼規(guī)模的架設(shè)能力蚁飒。因?yàn)樵谝淮未蔚膶?shí)戰(zhàn)訓(xùn)練中萝喘,程序猿的大腦會(huì)經(jīng)歷無數(shù)次主動(dòng)+被動(dòng)的“抽象、總結(jié)”的思維訓(xùn)練

也就是說爬早,有一種痛就叫做你不經(jīng)歷就不會(huì)懂的痛启妹。

圖5

2.一種標(biāo)準(zhǔn)化的實(shí)現(xiàn)

下面筆者以一個(gè)VUE+SpringBoot的系統(tǒng)為例饶米,列舉出筆者認(rèn)為比較實(shí)用的標(biāo)準(zhǔn)化實(shí)現(xiàn)

(1)MVC、MVP照瘾、MVVM=>WCSR

MVC丧慈、MVP、MVVM是業(yè)界常規(guī)的架構(gòu)模式鹃愤,我們簡單回顧一下它們的含義:

MVC:Model View Controller笑旺,是模型(model)-視圖(view)-控制器(controller)的縮寫筒主,一種軟件設(shè)計(jì)典范鸟蟹,用一種業(yè)務(wù)邏輯、數(shù)據(jù)藤韵、界面顯示分離的方法組織代碼熊经,將業(yè)務(wù)邏輯聚集到一個(gè)部件里面欲险,在改進(jìn)和個(gè)性化定制界面及用戶交互的同時(shí)匹涮,不需要重新編寫業(yè)務(wù)邏輯。MVC被獨(dú)特的發(fā)展起來用于映射傳統(tǒng)的輸入喜每、處理和輸出功能在一個(gè)邏輯的圖形化用戶界面的結(jié)構(gòu)中雳攘。

MVP:Model-View-Presenter 带兜;MVP 是從經(jīng)典的模式MVC演變而來刚照,它們的基本思想有相通的地方:Controller/Presenter負(fù)責(zé)邏輯的處理沃于,Model提供數(shù)據(jù),View負(fù)責(zé)顯示檩互。MVP與MVC有著一個(gè)重大的區(qū)別:在MVP中View并不直接使用Model咨演,它們之間的通信是通過Presenter (MVC中的Controller)來進(jìn)行的,所有的交互都發(fā)生在Presenter內(nèi)部饵较,而在MVC中View會(huì)直接從Model中讀取數(shù)據(jù)而不是通過 Controller遭赂。

MVVM:Model-View-ViewModel的簡寫。它本質(zhì)上就是MVC 的改進(jìn)版茄猫。MVVM 就是將其中的View 的狀態(tài)和行為抽象化困肩,讓我們將視圖 UI 和業(yè)務(wù)邏輯分開。ViewModel實(shí)現(xiàn)了數(shù)據(jù)綁定勇劣。

WCSR本質(zhì)就是MVC潭枣,為業(yè)務(wù)組件橫向切分的一種標(biāo)準(zhǔn)(圖6)

Website:用于承載頁面相關(guān)的容器幻捏,與JS端進(jìn)行對接

Composite:組合調(diào)度各類原子能力粘咖。

Single:原子能力

Repository:MO侈百、VO、持久化相關(guān)讽坏。

圖6

(2)DDD=>對業(yè)務(wù)進(jìn)行合理劃分的一種方法論

只是摘抄DDD繁多術(shù)語中的部分路呜,看到DDD體系的大致思路:

Domain(領(lǐng)域):一個(gè)領(lǐng)域具有類似的核心業(yè)務(wù)织咧,解決類似的問題域

Bounded Context(界限上下文):將Domain劃分成N個(gè)子域,Bounded Context用來描述子域間的關(guān)系笙蒙。Bounded Context實(shí)戰(zhàn)中通常會(huì)變成一個(gè)子系統(tǒng)or模塊。

Domain Model(領(lǐng)域模型):表達(dá)實(shí)體概念(例如:老師轧葛、學(xué)生)艇搀、過程概念(對老師出題考學(xué)生)

Entity(實(shí)體):class Person,有唯一標(biāo)識(shí)

ValueObject(值對象):int a=3;

Domain Service(領(lǐng)域服務(wù)):調(diào)度多個(gè)DomainModel衷笋,純粹的動(dòng)作矩屁,不適合建模為對象

Aggregate(聚合):描述Entity、ValueObject的關(guān)系

Factory(工廠):創(chuàng)建Entity慢蜓、ValueObject郭膛、Aggregate

Repostitory(倉庫):持久化到DB

個(gè)人認(rèn)為氛悬,DDD設(shè)計(jì)了很多嚴(yán)謹(jǐn)規(guī)范的術(shù)語以及分析業(yè)務(wù)需求的流程(仔細(xì)閱讀圖7就能理解DDD是個(gè)什么藥方)耘柱。在復(fù)雜的業(yè)務(wù)需求中调煎,能夠相對條理化己肮、規(guī)范化的縱向劃分業(yè)務(wù)子系統(tǒng)、業(yè)務(wù)組件等娄柳。

圖7

筆者不是DDD的鐵粉艘绍,但DDD至少是一個(gè)相對系統(tǒng)的方法論,實(shí)戰(zhàn)中至少可以讓項(xiàng)目組的關(guān)鍵角色相對快速達(dá)成一致的設(shè)計(jì)思路挎挖。

圖8

3.總結(jié)

本文的主題很難表述清楚蕉朵,筆者只能列舉所處項(xiàng)目常用的一種實(shí)現(xiàn)方式進(jìn)行闡述敷存,權(quán)當(dāng)拋磚引玉,有一種痛不經(jīng)歷真的無法感同身受锚烦。

PS:筆者程序猿生涯深受標(biāo)哥的指點(diǎn)和影響,文中常常引用他老人家經(jīng)典的觀點(diǎn)蛉拙,因此和小伙伴們制作了標(biāo)哥表情包,以表敬意彻亲。

圖9
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末畸肆,一起剝皮案震驚了整個(gè)濱河市宙址,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖恬涧,帶你破解...
    沈念sama閱讀 217,509評論 6 504
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件碴巾,死亡現(xiàn)場離奇詭異,居然都是意外死亡提揍,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,806評論 3 394
  • 文/潘曉璐 我一進(jìn)店門碳锈,熙熙樓的掌柜王于貴愁眉苦臉地迎上來售碳,“玉大人绞呈,你說我怎么就攤上這事〉枭” “怎么了?”我有些...
    開封第一講書人閱讀 163,875評論 0 354
  • 文/不壞的土叔 我叫張陵十拣,是天一觀的道長志鹃。 經(jīng)常有香客問我,道長缰趋,這世上最難降的妖魔是什么陕见? 我笑而不...
    開封第一講書人閱讀 58,441評論 1 293
  • 正文 為了忘掉前任,我火速辦了婚禮评甜,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘粘舟。我一直安慰自己,他們只是感情好蓖乘,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,488評論 6 392
  • 文/花漫 我一把揭開白布嘉抒。 她就那樣靜靜地躺著,像睡著了一般些侍。 火紅的嫁衣襯著肌膚如雪政模。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,365評論 1 302
  • 那天耗式,我揣著相機(jī)與錄音趁猴,去河邊找鬼。 笑死儡司,一個(gè)胖子當(dāng)著我的面吹牛娱挨,可吹牛的內(nèi)容都是我干的跷坝。 我是一名探鬼主播碉碉,決...
    沈念sama閱讀 40,190評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼垢粮,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了足丢?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,062評論 0 276
  • 序言:老撾萬榮一對情侶失蹤斩跌,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后柬批,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,500評論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡氮帐,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,706評論 3 335
  • 正文 我和宋清朗相戀三年皮服,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了参咙。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 39,834評論 1 347
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖净宵,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情归斤,我是刑警寧澤脏里,帶...
    沈念sama閱讀 35,559評論 5 345
  • 正文 年R本政府宣布,位于F島的核電站酝碳,受9級(jí)特大地震影響疏哗,放射性物質(zhì)發(fā)生泄漏返奉。R本人自食惡果不足惜芽偏,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,167評論 3 328
  • 文/蒙蒙 一污尉、第九天 我趴在偏房一處隱蔽的房頂上張望往产。 院中可真熱鬧仿村,春花似錦兴喂、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,779評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至佃迄,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間呵俏,已是汗流浹背滔灶。 一陣腳步聲響...
    開封第一講書人閱讀 32,912評論 1 269
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留麻车,地道東北人斗这。 一個(gè)月前我還...
    沈念sama閱讀 47,958評論 2 370
  • 正文 我出身青樓,卻偏偏與公主長得像赁咙,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個(gè)殘疾皇子免钻,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,779評論 2 354