领域驱动设计(2)怎么使用沟通
領(lǐng)域驅(qū)動設(shè)計(2)怎么使用溝通
廢話
????????溝通的重要性:溝通很重要,不論在生活中,還是工作中溝通處理不好,我想為人處事這塊肯定有問題.LZ接觸社會比較早,做過焊工、銷售、跑過業(yè)務(wù)...,一路走來在溝通上同樣的也吃過很多的虧,受了不少的不會溝通的害處。我在做業(yè)務(wù)的時候常常用一句話告誡自己“一句話能死,一句話能活”,可能因為一句話業(yè)務(wù)活了,可能一句話面試活了,可能一句話感情有了....可能性很多,其實這可能的情況都是機遇只不過有大有小罷了.
?
領(lǐng)域驅(qū)動設(shè)計中的溝通:
有很多的項目是處于這一種情況,甲方(也就是領(lǐng)域驅(qū)動中的專家)不懂技術(shù),不懂什么是開發(fā),沒有開發(fā)的思想,唯一知道的是我想要什么的系統(tǒng)、功能或產(chǎn)品。因為領(lǐng)域驅(qū)動提倡的是開發(fā)人員和領(lǐng)域?qū)<矣薪涣骱蜏贤ǖ?#xff0c;那么在平常開發(fā)的過程中常常會有這樣的事情發(fā)生,業(yè)務(wù)人員和甲方溝通過業(yè)務(wù)之后,把需求帶了回來,開發(fā)人員根據(jù)對甲方業(yè)務(wù)需求的分析進(jìn)行設(shè)計開發(fā),功能完成后,甲方驗收的時候發(fā)現(xiàn)不是自己想要的結(jié)果,這樣的后果在做項目的角度上無疑是非常嚴(yán)重的,不僅僅是延長了項目的完工時間,同樣也打壓了團(tuán)隊的氣氛以及積極心態(tài),為什么會造成這樣的事情的發(fā)生,會不會是甲方描述的不清楚,也或者說是不是業(yè)務(wù)描述在傳遞的過程中有丟失...等等@可能有些人不認(rèn)同了,為什么沒有形成需求文檔讓用戶簽字確認(rèn)等一些正規(guī)操作,這里舉例說明的問題是相互溝通,相互了解。事實上一些好產(chǎn)品經(jīng)理、團(tuán)隊會和用戶進(jìn)行深入的業(yè)務(wù)探討,往往針對一個需求,你來我往的戰(zhàn)斗幾輪后才會產(chǎn)出需求、不管是反駁還是提出各種疑問或者是使用各種方法,如頭腦風(fēng)暴、用戶故事、原型圖引導(dǎo)。。。等手段,這樣的深層次的溝通才會產(chǎn)出更加準(zhǔn)確的需求,以此來減少需求的更改,也為項目的順利的驗收埋下了因,而不是簽字確認(rèn)需求為以后甩鍋做準(zhǔn)備。
在這種深層次溝通的情況下我們(乙方)講漸漸的融入進(jìn)甲方的領(lǐng)域中,這個過程中我們積累了很多無形的財富,比如在公共語言上(在領(lǐng)域驅(qū)動設(shè)計中稱為:UBIQUITOUS ?LANGUAGE 通用語言)將達(dá)成一致,當(dāng)甲方使用他們自己的行話進(jìn)行溝通的時候我們將不再迷茫,在種情況下進(jìn)行溝通我們便可繪制出更加準(zhǔn)確的模型,模型與模型之間的關(guān)系構(gòu)建出了業(yè)務(wù)的規(guī)則,一些詞和短語也將反映出模型的含義。當(dāng)所有的項目干系人都使用基于模型的語言來進(jìn)行溝通交流,模型語言使用的越普遍,理解就越容易。切記的是在構(gòu)建模型的過程中使用的通用語言應(yīng)避免那些繞口、語義表述不正確的詞或語句,如果發(fā)現(xiàn)需盡快找到替代的詞或語句,通用語言越普通越貼近生活越容易理解。
舉例說明領(lǐng)域驅(qū)動設(shè)計語言如何使用
以下會出兩個例子做一個對比:
(1)沒有使用領(lǐng)域語言是這樣溝通的
?
新建四張表
?
一個簡單的用戶請求領(lǐng)域
在溝通過程中一般是這樣溝通的:
?
用戶:當(dāng)我的銷售地區(qū)(Area)發(fā)生更改的時候,需要重新制定銷售方案嗎?
開發(fā)人員:是的銷售區(qū)域發(fā)生改變的時候我們需要刪除銷售方案表(SalesScheme)中的所有有關(guān)該地區(qū)的方案信息。然后將新的地區(qū)的信息通過服務(wù)去刪除然后重新制定新地區(qū)的銷售方案信息.
用戶:明白了,你們是刪除數(shù)據(jù)行項目,然后去插入行項目,但是如果我剛開始,我只知道哪些銷售地區(qū)需要需要放棄,但是我還不知道替換成哪些銷售地區(qū)怎么辦呢,畢竟每個地區(qū)銷售的策略是不一樣的。
開發(fā)人員:這樣也沒有問題,服務(wù)對數(shù)據(jù)的操作很容易,咱們先清除放棄的銷售地區(qū),等到找到替換的銷售地區(qū)我們再去添加也是一樣的。
用戶:可以,因為我們每次的制定一份銷售計劃需要花費很大的人力物力,一般情況下對于銷售方案部門不想去更改。
開發(fā)人員:我們通過銷售方案服務(wù)查詢出要放棄地區(qū)的銷售方案信息進(jìn)行列表顯示,然后與新地區(qū)的銷售方案進(jìn)行一個對比,看看是否有沒有制定新的銷售方案的必要。
用戶:我明白了。
?
現(xiàn)在很多開發(fā)團(tuán)隊使用的對話方案,看起來完成用戶的需求也是沒有問題的。
?
用領(lǐng)域模型進(jìn)行討論:
用戶:當(dāng)我的Area(銷售地區(qū))發(fā)生更改的時候,需要重新制定銷售方案嗎?
開發(fā)人員:是的Aera(銷售地區(qū))發(fā)生改變的時候我們需要刪除SalesScheme(銷售方案表)中的所有有關(guān)該Aera(銷售地區(qū))的方案信息。然后將新的Aera的Scheme(方案)信息通過SalesSchemeService(銷售方案服務(wù))去刪除然后重新插入新的銷售方案信息.到SalesScheme(銷售方案表)中。
用戶:明白了,你們是刪除SalesScheme(銷售方案表)行項目,然后去插入行項目,但是如果我剛開始,我只知道哪些Aera(銷售地區(qū))需要需要放棄,但是我還不知道替換成哪些Aera(銷售地區(qū))怎么辦呢,畢竟每個地區(qū)銷售的策略是不一樣的。
開發(fā)人員:這樣也沒有問題,SalesSchemeService(銷售方案服務(wù))對數(shù)據(jù)的操作很容易,咱們先清除放棄的Aera(銷售地區(qū)),等到找到替換的Aera(銷售地區(qū))我們再去添加也是一樣的。
用戶:可以,因為我們每次的制定一份Scheme(方案)需要花費很大的人力物力,一般情況下對于Scheme(方案)不想去更改。
開發(fā)人員:我們通過SalesSchemeService(銷售方案服務(wù))查詢出要放棄Aera(銷售地區(qū))的Scheme(方案)信息進(jìn)行列表顯示,然后與新地區(qū)的Scheme(方案)進(jìn)行一個對比,看看是否有沒有制定新的Scheme(方案)的必要。
用戶:我明白了。
?
?
這是模擬針對同一個業(yè)務(wù)需求用不同的方式進(jìn)行的相互討論,有人會想了你這不是換了一種交流方式嗎?我們開發(fā)設(shè)計上也是這么做的啊,事實上很多公司都在這么做,但是因為一些特殊的原因?qū)е挛覀冮_發(fā)人員是接觸不到甲方的,大多數(shù)的場景都是通過項目經(jīng)理或者產(chǎn)品經(jīng)理給我們描述,其實換一種角度,項目經(jīng)理/產(chǎn)品經(jīng)理把甲方當(dāng)做領(lǐng)域?qū)<?#xff0c;開發(fā)人員也可以把項目經(jīng)理/產(chǎn)品經(jīng)理當(dāng)做領(lǐng)域?qū)<?#xff0c;其實這樣做也避免了很多摩擦風(fēng)險,把很多愉快和不愉快的事情控制在了項目內(nèi)部,但是在項目內(nèi)部使用領(lǐng)域的UBIQUITOUS ?LANGUAGE(通用語言)去溝通避免了對同一個業(yè)務(wù)不同的人產(chǎn)生不同的理解,開發(fā)人員不在使用自己的語言去溝通去設(shè)計,使用同一種語言去溝通,是開發(fā)人員之間省去了不必要的翻譯工作,在和項目組其他干系人去溝通的時候很少會出現(xiàn)(聽不懂、你再說一遍、等一下我記一下、來麻煩重新描述一下、你看我這樣理解對不對呢、等等)這樣的情況,因為使用同一種語言描繪出的業(yè)務(wù),大家都會明白的,這樣對執(zhí)行效率、準(zhǔn)確性以及代碼質(zhì)量會有很大的提升。就是相互之間請別人幫忙查看一下(code review)代碼的時候也會方面很多。通用語言使用的越多記憶越牢固。
?
?
在我的真正項目經(jīng)歷中令我印象最深的一次是,我們的主系統(tǒng),是有很多個子系統(tǒng)組成的,我們項目組負(fù)只責(zé)其中一個系統(tǒng)模塊,同時參與該系統(tǒng)的還有多個團(tuán)隊,所有子系統(tǒng)的功能性測試已經(jīng)完成,要進(jìn)入流程性測試的時候,再一次會議上發(fā)生了這樣的事情,甲方在很賣力講測試業(yè)務(wù)流程的時候我很驚奇的發(fā)現(xiàn)在場的大多數(shù)人員都處于一個懵逼狀態(tài),當(dāng)然也包括我(哈哈)舉個例子:在做一個反向訂單業(yè)務(wù)的時候我們在項目中稱為“反向訂單”,到甲方這里稱為“散件入庫”這只是其中的一個,總之當(dāng)時給我的感覺就是我是不是進(jìn)錯會議室了。
當(dāng)然模型的制定不會是那么順利的,這個過程相當(dāng)于讓甲方學(xué)習(xí)了一門新的語言了,但是如果在項目的一開始我們就帶入模型的概念,從文檔,原型、示例圖、PPT、各種圖、會議上等都帶入模型的概念,慢慢的也都習(xí)慣了,時間長了大家就都會認(rèn)為這是合理的了,時間能消磨很多棱角的。
在第二個示例(用領(lǐng)域模型進(jìn)行討論:)中我們很明顯的可以發(fā)現(xiàn)在溝通的過程中使用了很多的模型中的關(guān)鍵詞或者短語進(jìn)行著溝通,其實精簡模型的最有效的方式就是溝通,再通過溝通的過程中盡可能多的使用模型中的術(shù)語,這樣我們才有可能找出更多的模型變化,然后找出一個最精簡的變化去更新模型,其實這樣的好處不僅僅是對模型的精簡,也是對程序設(shè)計,對代碼的精簡,也就是說在我們?nèi)粘5臏贤ㄟ^程中其實已經(jīng)在對怎么做出高質(zhì)量的產(chǎn)品做著研究或者是改變的、這個過程也是在對代碼做著不斷的重構(gòu)動作(語言的使用十分重要)
?
?
最近一兩個月將持續(xù)更新領(lǐng)域驅(qū)動設(shè)計。有偏差的望大家指出,相互學(xué)習(xí)。?
????????????? 有不足之處 希望大家指出相互學(xué)習(xí),
?????????????????????????????????? 本文原創(chuàng):轉(zhuǎn)載請注明出處 謝謝!
轉(zhuǎn)載于:https://www.cnblogs.com/szlblog/p/9103984.html
總結(jié)
以上是生活随笔為你收集整理的领域驱动设计(2)怎么使用沟通的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: CentOS最小化系统,怎么安装图形界面
- 下一篇: 文本处理常用操作