領(lǐng)域驅(qū)動(dòng)設(shè)計(jì)學(xué)習(xí)筆記(一)

談到領(lǐng)域驅(qū)動(dòng)設(shè)計(jì)逸月,簡簡單單的六個(gè)字,卻包含了兩個(gè)關(guān)鍵點(diǎn):一個(gè)是“領(lǐng)域”遍膜,另一個(gè)是“設(shè)計(jì)”碗硬∪肯妫“驅(qū)動(dòng)”一詞,則對(duì)兩個(gè)名詞(關(guān)鍵點(diǎn))的關(guān)系進(jìn)行了定義恩尾。左思右想弛说,“驅(qū)動(dòng)”一詞好像是二者間關(guān)系一個(gè)現(xiàn)在看來最為恰當(dāng)?shù)拿枋觯瑹o可替代——既不是領(lǐng)域強(qiáng)制性決定如何去設(shè)計(jì)翰意,又不是設(shè)計(jì)可以凌駕于領(lǐng)域之外的無關(guān)緊要木人,而是一種平行的,互為依托的關(guān)系冀偶。沒有設(shè)計(jì)的領(lǐng)域毫無意義醒第,而沒有領(lǐng)域的設(shè)計(jì)也只是紙上談兵。

似乎进鸠,對(duì)領(lǐng)域(模型)的設(shè)計(jì)稠曼,是對(duì)一件藝術(shù)品的仔細(xì)雕琢一般。

我開始學(xué)習(xí)領(lǐng)域驅(qū)動(dòng)設(shè)計(jì)客年,源動(dòng)力在于擼代碼時(shí)的絕望霞幅。

對(duì),就是絕望量瓜。

冗長而不知其意的名稱司恳,無窮無盡的 setter/getter。我仿佛一眼便看到了世界的盡頭榔至。就像現(xiàn)在你抵赢,不幸看到我這冗長、無聊唧取、不知所云的開頭一般铅鲤。

就問你,累不累枫弟?煩不煩邢享?絕不絕望?

絕望也要看下去淡诗。別問我為什么骇塘。從現(xiàn)在開始,在你的世界里韩容,沒有為什么款违。

好了,言歸正傳群凶。

領(lǐng)域驅(qū)動(dòng)設(shè)計(jì)中插爹,最為關(guān)鍵的兩個(gè)核心點(diǎn),或者稱之為支柱的便是 <strong>限界上下文</strong> 和 <strong>通用語言</strong>。

一直很奇怪老外的語法形式赠尾,又間接對(duì)國內(nèi)整體翻譯水平產(chǎn)生了懷疑力穗。

在我看來,限界上下文倒不如稱為 <strong>語境</strong>(上下文是具象的气嫁,語境才是抽象的好不好当窗?)。

通用語言寸宵,就是在語境中能說得通崖面,說順溜,不會(huì)產(chǎn)生明顯歧義(怪我大中華文化博大精深咯)的一個(gè)詞梯影、一句話嘶朱。

看到這里,你應(yīng)該覺著這玩意兒時(shí)騙人的吧光酣。這樣想就對(duì)了疏遏,沒這樣想就試著想想。

其實(shí)救军,一開始我也是這么想的财异。一個(gè)詞、一句話唱遭、一段文戳寸,外加一個(gè)語境,就能搞出什么鬼設(shè)計(jì)來拷泽?

還真別說疫鹊,舉個(gè)簡單的例子,亮瞎你的 24K 純鈦合金 dog 眼:

試著設(shè)計(jì)一個(gè)我們常見的Class:User

public class User {

    private String username;

    public void setUsername(String username) {
        this.username = username;
    }

    public String getUsername() {
        return this.username;
    }
}

試著用一個(gè) User 實(shí)例化對(duì)象調(diào)用他的 getUsername()方法:

public class Main {

    public static void main(String[] args) {
        User user = new User();
        String username = user.getUsername();
    }
}

傳統(tǒng)的調(diào)用方法大概就是這樣吧司致。

不論其他拆吆,請(qǐng)您給我順暢地用中文將 user.getUsername() 翻譯過來。

我的翻譯是這樣的:用戶(user)得到(get)Username(用戶名)脂矫。
so easy, <strong>用戶得到用戶名</strong>枣耀。

發(fā)現(xiàn)問題沒有?沒有庭再?回幼稚園重新回爐深造去捞奕。好吧,開個(gè)玩笑拄轻,重來一次颅围,還是上面的模式:將 User 替換成 You:

public class You {

    private String name;

    public void setName(String name) {
        this.name = name;
    }

    public String getName() {
        return this.name;
    }
}

試著用一個(gè) You 實(shí)例化對(duì)象調(diào)用他的 getName()方法:

public class Main {

    public static void main(String[] args) {
        You you = new You();
        String name = you.getName();
    }
}

首先聲明,以上這個(gè)例子只在于說明問題恨搓。

就問你院促,發(fā)現(xiàn)問題沒?還沒發(fā)現(xiàn)?對(duì)不起一疯,不開玩笑的說,請(qǐng)您出門右轉(zhuǎn)夺姑,祖國的花兒幼稚園歡迎您墩邀!

慢走不送,下次也別再來了盏浙。

什么鬼嘛眉睹?<strong>你得到名字</strong>。

你需要得到你的名字嗎废膘?需要嗎竹海?需要嗎?需要嗎丐黄?

不需要斋配!

你的名字是你出生后父母給你起的,中間即使可能更名(換姓的請(qǐng)舉手)灌闺,但你從來都不需要去“得到你的姓名”艰争。除非你患上了“失憶癥”。但桂对,即使如此甩卓,你也應(yīng)該調(diào)用 AmnesicPatients#whoami()。

好蕉斜,話題繼續(xù)回到領(lǐng)域驅(qū)動(dòng)設(shè)計(jì)上逾柿。說到底,領(lǐng)域驅(qū)動(dòng)設(shè)計(jì)就是用來解決不合理:包名不合理宅此、類名不合理机错、屬性名不合理、方法名不合理父腕、方法位置不合理毡熏、調(diào)用不合理、程序奔潰不合理......

沒有包治各種不合理(起碼李家孩子和隔壁老王同姓這種不合理是真沒轍)侣诵,畢竟痢法,凡事都有妥協(xié)與余地,但總歸大部分不合理可以得到根治杜顺。況且财搁,一切都合理才是最大的不合理。

繼續(xù) User 這個(gè)例子躬络,這個(gè)是改進(jìn)版的:

public class User {

    private String username;

    public void setUsername(String username) {
        this.username = username;
    }

    public String username() {
        return this.username;
    }
}

public class Main {

    public static void main(String[] args) {
        User user = new User();
        user.username();
    }
}

現(xiàn)在的調(diào)用是不是合理多了:<strong>用戶的用戶名</strong>

public class You {

    private String name;

    public void setName(String name) {
        this.name = name;
    }

    public String name() {
        return this.name;
    }
}

public class Main {
    public static void main(String[] args) {
        You you = new You();
        you.name();
    }
}

<strong>你的名字</strong>

別問我“的”是哪兒來的尖奔, ‘.’ 即是“的”,“的”即是 ‘.’ 。

不要懷疑提茁,即使將現(xiàn)在的論調(diào)拿到過去舊的案例淹禾,舊案例的調(diào)用依舊不合理:用戶的得到用戶名(得到用戶名的用戶)、你的得到名字茴扁。

八格牙路铃岔。你的良心大大地壞了。

其實(shí)峭火,初識(shí) DDD(Domain Drive Design · 領(lǐng)域驅(qū)動(dòng)設(shè)計(jì))覺得最難的也就是對(duì)什么“限界上下文”(語境)和“通用語言”(在某一語境中盡最大可能無歧義的詞毁习、句)了。所以......

上面討論的卖丸,其實(shí)基本都是屬于通用語言范疇纺且,至于語境(限界上下文),我真不知道該怎么描述稍浆,難道是载碌,見人說人話,見鬼說鬼話——同樣的人衅枫,在不同的環(huán)境下恐仑,會(huì)有不同的表現(xiàn)形式。一個(gè)同樣名稱的 Class为鳄,在不同的業(yè)務(wù)系統(tǒng)中就有可能描述了不同的兩種事物裳仆?

好吧,賤人賤智了孤钦!

《實(shí)現(xiàn)領(lǐng)域驅(qū)動(dòng)設(shè)計(jì)》中歧斟,談到通用語言是,業(yè)務(wù)專家和開發(fā)者等一群對(duì)相關(guān)業(yè)務(wù)或技術(shù)熟悉的人偏形,進(jìn)行反復(fù)討論后静袖,互相補(bǔ)充后達(dá)成一致的產(chǎn)物。

所以說俊扭。队橙。。那啥萨惑,剛才出門右轉(zhuǎn)的朋友捐康,你可以學(xué)成歸來了。

PS:行文風(fēng)格有點(diǎn)騷(我這老臉)庸蔼,不喜輕噴解总!

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市姐仅,隨后出現(xiàn)的幾起案子花枫,更是在濱河造成了極大的恐慌刻盐,老刑警劉巖,帶你破解...
    沈念sama閱讀 222,252評(píng)論 6 516
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件劳翰,死亡現(xiàn)場(chǎng)離奇詭異敦锌,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)佳簸,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,886評(píng)論 3 399
  • 文/潘曉璐 我一進(jìn)店門乙墙,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人溺蕉,你說我怎么就攤上這事〉孔觯” “怎么了疯特?”我有些...
    開封第一講書人閱讀 168,814評(píng)論 0 361
  • 文/不壞的土叔 我叫張陵,是天一觀的道長肛走。 經(jīng)常有香客問我漓雅,道長,這世上最難降的妖魔是什么朽色? 我笑而不...
    開封第一講書人閱讀 59,869評(píng)論 1 299
  • 正文 為了忘掉前任邻吞,我火速辦了婚禮,結(jié)果婚禮上葫男,老公的妹妹穿的比我還像新娘抱冷。我一直安慰自己,他們只是感情好梢褐,可當(dāng)我...
    茶點(diǎn)故事閱讀 68,888評(píng)論 6 398
  • 文/花漫 我一把揭開白布旺遮。 她就那樣靜靜地躺著,像睡著了一般盈咳。 火紅的嫁衣襯著肌膚如雪耿眉。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 52,475評(píng)論 1 312
  • 那天鱼响,我揣著相機(jī)與錄音鸣剪,去河邊找鬼。 笑死丈积,一個(gè)胖子當(dāng)著我的面吹牛筐骇,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播江滨,決...
    沈念sama閱讀 41,010評(píng)論 3 422
  • 文/蒼蘭香墨 我猛地睜開眼拥褂,長吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來了牙寞?” 一聲冷哼從身側(cè)響起饺鹃,我...
    開封第一講書人閱讀 39,924評(píng)論 0 277
  • 序言:老撾萬榮一對(duì)情侶失蹤莫秆,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后悔详,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體镊屎,經(jīng)...
    沈念sama閱讀 46,469評(píng)論 1 319
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,552評(píng)論 3 342
  • 正文 我和宋清朗相戀三年茄螃,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了缝驳。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 40,680評(píng)論 1 353
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡归苍,死狀恐怖用狱,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情拼弃,我是刑警寧澤夏伊,帶...
    沈念sama閱讀 36,362評(píng)論 5 351
  • 正文 年R本政府宣布,位于F島的核電站吻氧,受9級(jí)特大地震影響溺忧,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜盯孙,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 42,037評(píng)論 3 335
  • 文/蒙蒙 一鲁森、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧振惰,春花似錦歌溉、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,519評(píng)論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至透罢,卻和暖如春榜晦,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背羽圃。 一陣腳步聲響...
    開封第一講書人閱讀 33,621評(píng)論 1 274
  • 我被黑心中介騙來泰國打工乾胶, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人朽寞。 一個(gè)月前我還...
    沈念sama閱讀 49,099評(píng)論 3 378
  • 正文 我出身青樓识窿,卻偏偏與公主長得像,于是被迫代替她去往敵國和親脑融。 傳聞我的和親對(duì)象是個(gè)殘疾皇子喻频,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,691評(píng)論 2 361

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