日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

DDD理论学习系列(1)-- 通用语言

發(fā)布時間:2025/3/18 编程问答 28 豆豆
生活随笔 收集整理的這篇文章主要介紹了 DDD理论学习系列(1)-- 通用语言 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

1.引言

在開始之前,我想我們有必要先了解以下DDD的主要參與者。因為畢竟語言是人說的嗎,就像我們面向?qū)ο缶幊桃粯?#xff0c;那通用語言面向的是?
DDD的主要參與者:領(lǐng)域?qū)<?#43;開發(fā)人員
領(lǐng)域?qū)<?#xff1a;精通業(yè)務(wù)的任何人。
開發(fā)人員:開發(fā)+測試。
領(lǐng)域?qū)<疑瞄L某個領(lǐng)域的知識,專注于交付的業(yè)務(wù)價值。
開發(fā)人員則注重于技術(shù)實現(xiàn)。
開發(fā)人員總是想著類、接口、方法、設(shè)計模式、架構(gòu)等。以面向?qū)ο蟮木幊趟枷脒M行思考,思考如何進行抽象、封裝、繼承、多態(tài)等。而領(lǐng)域?qū)<覍浖械目蚣堋⒊志没?、?shù)據(jù)庫等沒有概念,而這也就導(dǎo)致了他們之間交流的困難性。

那怎么解決交流障礙這個問題呢?

2. 通用語言

拋開DDD而言,單從字面意思來理解,我們首先肯定先聯(lián)想到作為世界使用最多的語言--英語。
英語之所以能成為通用語言,我想無非是以下幾方面:

  • 簡單易學(xué)

  • 使用率高

  • 國際通用

那DDD中通用語言又是怎樣呢?
首先它也同樣要擁有【簡單】的特性,這樣才便于理解和傳播。
其次,它也要有【通用】、【使用率高】的特性,因為只有在軟件開發(fā)的過程中,團隊范圍內(nèi)所有的參與人員廣泛使用,才能準確傳遞業(yè)務(wù)規(guī)則。

通用語言是團隊交流的基礎(chǔ)上建立起來的,代碼則是基于通用語言來進行業(yè)務(wù)表達的。

3. 舉個例子

項目經(jīng)理安排了一項任務(wù)給我:
圣杰這個補丁處理下【可銷控制】這個需求。
聽后,真是一臉懵逼,【可銷控制】是什么鬼?

這明顯是專業(yè)術(shù)語,我不懂的專業(yè)術(shù)語。
按照DDD對通用語言的定義,【可銷控制】就不算通用語言。
因為只有領(lǐng)域?qū)<抑浪暮x,開發(fā)人員一臉茫然。

但通用語言是領(lǐng)域?qū)<液烷_發(fā)人員一起創(chuàng)建的,所以我們開個需求會議,來梳理下專業(yè)術(shù)語背后的含義。

可銷控制的應(yīng)用場景是:
在ERP中,在做單時對銷售員負責(zé)的客戶進行范圍控制。比如,A客戶是銷售員小李發(fā)展過來的,小李希望僅能自己負責(zé)對A客戶的業(yè)務(wù)。

這么一解釋,是不是明白不少了。但是不是還有幾點疑惑?

  • 可銷范圍如何配置?

  • 做什么單據(jù)時進行可銷范圍控制?

  • 如何進行可銷控制?

  • 可銷控制需不需要參數(shù)控制?

經(jīng)過討論,得出以下結(jié)論:

  • 提供專門的【銷售員-客戶可銷控制】界面進行銷售員-客戶映射數(shù)據(jù)配置。

  • 做銷售訂單單據(jù)時進行可銷范圍控制

  • 在錄入銷售員后,做單員在選擇客戶列表時,客戶列表中僅顯示可銷范圍配置的客戶數(shù)據(jù)。

  • 提供【銷售員-客戶可銷范圍控制】系統(tǒng)參數(shù),勾選后才進行可銷范圍控制。

好了,這下需求理解個七八九了。
原來可銷控制就是銷售員-客戶銷售范圍控制。
咱們用一句話來精簡下這個需求:
可銷控制是指銷售員所負責(zé)客戶的范圍控制,當(dāng)勾選了【銷售員-客戶可銷控制】參數(shù)后,在做銷售訂單錄入客戶數(shù)據(jù)時,客戶列表僅能選擇到在【可銷控制】列表中為該銷售員配置的客戶。

經(jīng)過這么一說明,我們是不是已經(jīng)理清了【可銷控制】這個需求點。

那這種通過團隊交流達成共識的能夠簡單清晰準確傳遞業(yè)務(wù)規(guī)則的語言(可以是文字、圖片等)即可稱為通用語言。

4. 通用語言的價值

就像上面所說的那樣,通用語言的最大價值是解決了交流障礙問題,使領(lǐng)域?qū)<液烷_發(fā)人員能夠協(xié)同合作,從而能夠確保業(yè)務(wù)需求的正確表達。
另外,基于通用語言,開發(fā)人員能夠開發(fā)出可讀性更好的代碼,從而將業(yè)務(wù)需求準確轉(zhuǎn)化為代碼設(shè)計。達到DDD的目標代碼即設(shè)計,設(shè)計即代碼。通俗的講,也就是開發(fā)人員寫的代碼領(lǐng)域?qū)<乙材芸炊?/p>

5.通用語言的代碼表達

既然開發(fā)人員也要基于通用語言進行代碼開發(fā),那代碼如何體現(xiàn)通用語言呢?
在《實現(xiàn)領(lǐng)域驅(qū)動設(shè)計》書中有一個簡單的例子(P238),我們一起來看一下:

  • 系統(tǒng)必須對User進行認證,并且只有當(dāng)Tenant(租戶)處于激活狀態(tài)時才能對User進行認證。

上面這個用例就是基于通用語言的用例,簡單清楚的說明了業(yè)務(wù)規(guī)則。
我們先看第一種代碼實現(xiàn):

bool?anthentic?=?false; User?user?=?_userRepository().FindUserByTenantIdAndUserName(tenantId,?userName);if(user!=null) {authentic?=?user.IsAuthentic(password); }return?authentic;

這段代碼完全不能反應(yīng)通用語言,主要存在以下問題:

  • 這段代碼先查找user,再對user進行密碼匹配來完成認證。其中user.IsAuthentic(password);表示的是“用戶是否被認證”的意思,而沒有表達出“認證”這個過程,即“對用戶進行認證”。

  • 未體現(xiàn)“檢查Tenant是否處于激活狀態(tài)”這個前提條件。

  • 知道問題后,我們可以講代碼略做改動:

    bool?anthentic?=?false; Tenant?tenant?=?_tenantRepository.FindTenantById(tenantId);//檢查租戶是否激活if(tenant!=null&&tenant.IsActive){ User?user?=?_userRepository.FindUserByTenantIdAndUserName(tenantId,?userName);if(user!=null) {authentic?=?tenant.Authenticate(user,?password);//租戶對用戶進行認證} }return?authentic;

    以上代碼雖然也不是最終結(jié)果,但至少對通用語言進行了體現(xiàn)。通讀代碼,就能明白業(yè)務(wù)用例,體現(xiàn)代碼即設(shè)計這一思想。










    本文轉(zhuǎn)自 yuanzhitang 51CTO博客,原文鏈接:http://blog.51cto.com/yuanzhitang/1946893,如需轉(zhuǎn)載請自行聯(lián)系原作者

    總結(jié)

    以上是生活随笔為你收集整理的DDD理论学习系列(1)-- 通用语言的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。