領(lǐng)域中還同時(shí)存在問題空間和解決方案空間蔬捷。在問題空間中醇坝,我們思考的是業(yè)務(wù)所面臨的挑戰(zhàn)鸟顺,而在解決方案空間中,我們思考如何實(shí)現(xiàn)軟件以 解決這些業(yè)務(wù)挑戰(zhàn)幽歼。以下是如何將這兩者應(yīng)用到我們已經(jīng)學(xué)過的知識(shí)中:
1.問題空間是領(lǐng)域的一部分,對(duì)問題空間的開發(fā)將產(chǎn)生一個(gè)新的核心域谬盐,對(duì)問題空間的評(píng)估應(yīng)該同時(shí)考慮已有子域和額外所需子域甸私,因此,問題空間是核心域和其他子域的組合飞傀。問題空間中的子域通常隨著項(xiàng)目的不同而不同皇型。他們各自關(guān)注域當(dāng)前的業(yè)務(wù)問題,這使得子域?qū)τ趩栴}空間的評(píng)估非常有用砸烦。子域允許我們快速地瀏覽領(lǐng)域中的各個(gè)方面弃鸦,這些方面對(duì)于解決特定的問題是必須的。
2.解決方案空間包括一個(gè)或多個(gè)限界上下文幢痘,即一組特定的軟件模型唬格,這是因?yàn)榻缦奚舷挛募词且粋€(gè)特定的解決方案,它是通過軟件的方式來實(shí)現(xiàn)解決方案雪隧。
通常西轩,我們希望將子域一對(duì)一地對(duì)應(yīng)到限界上下文。這種做法顯示地將領(lǐng)域模型分離到不同的業(yè)務(wù)板塊中脑沿,并將問題空間和解決方案空間融合在一起藕畔。在實(shí)踐中,這種做法并不總是可能的庄拇,但是通過新的努力注服,我們是可以做到這一點(diǎn)的。讓我們考慮一個(gè)遺留系統(tǒng)措近,它有可能是個(gè)大泥球溶弟,其中子域和限界上下文存在相交的地方。在一個(gè)大型的企業(yè)中瞭郑,通過對(duì)問題空間的評(píng)估辜御,我們可以減少錯(cuò)誤,進(jìn)而降低成本屈张。我擒权,嗯可以在概念上使用兩個(gè)或者多個(gè)子域來分解限界上下文袱巨,或者將多個(gè)限界上下文包含在同一個(gè)子域中。為了澄清問題空間和解決方案空間的區(qū)別碳抄,讓我們來看一個(gè)例子愉老。?
讓我們來看看一個(gè)大型的ERP系統(tǒng)提供許多模塊化的業(yè)務(wù)服務(wù),將不同的模塊看成不同的子域是有好處的剖效。比如嫉入,我們可以將庫(kù)存模塊和采購(gòu)模塊拆分成不同的邏輯子域。我們將它們分別命名為庫(kù)存子域和采購(gòu)子域璧尸,在下文中咒林,我們將講到為什么這種劃分是有用的。
在我們實(shí)施某個(gè)解決方案之前逗宁,我們需要對(duì)問題空間和解決方案空間進(jìn)行評(píng)估映九。為了保證你的項(xiàng)目朝著正確的方向進(jìn)行,你需要先回答以下問題:
1.這個(gè)戰(zhàn)略的核心域的名字是什么瞎颗,它的目標(biāo)是什么件甥?
2.這個(gè)戰(zhàn)略核心域中包含哪些概念?
3.這個(gè)核心域的支撐子域和通用子域是什么哼拔?
4.如何安排項(xiàng)目人員引有?
5.你能組建出一支合適的團(tuán)隊(duì)嗎?
如果你不了解核心域的目標(biāo)及其所需的支撐子域倦逐,那么你是不能從核心域中得到好處的譬正,同時(shí)你也無法避免由此帶來的陷阱。因此檬姥,我們需要全面地對(duì)問題空間進(jìn)行評(píng)估曾我,并確保所有的利益相關(guān)方在核心域的目標(biāo)上都達(dá)成一致。
在了解了問題空間之后健民,我們來看看解決方案空間抒巢。對(duì)于問題空間的評(píng)估也是有益于理解解決方案空間的。解決方案空間在很大程度上收到現(xiàn)有系統(tǒng)和技術(shù)的影響秉犹,這里蛉谜,我們應(yīng)該根據(jù)分離的限界上下文仔細(xì)地思考,考慮以下問題:
1.有哪些軟件資產(chǎn)是已經(jīng)存在的崇堵,它們是可以重用的嗎型诚?
2.哪些資產(chǎn)是需要?jiǎng)?chuàng)建的,或者從別處獲得鸳劳?
3.這些資產(chǎn)是如何集成在一起的狰贯?
4.還需要什么樣的集成?
5.假設(shè)已經(jīng)有了現(xiàn)有資產(chǎn)和那些需要被創(chuàng)建的資產(chǎn),我們還需要做些什么暮现?
6.核心域和那些支撐項(xiàng)目的成功幾率如何还绘?會(huì)不會(huì)出現(xiàn)由于其中一個(gè)失敗而導(dǎo)致整個(gè)項(xiàng)目失敗的可能楚昭?
7.在哪些地方我們使用了完全不同的術(shù)語(yǔ)栖袋?
8.限界上下文之間在哪些地方存在概念重疊?
9.這些重疊的概念在不同的限界上下文之間是如何映射和翻譯的抚太?
10.哪些限界上下文包含了核心域中的概念塘幅,其中是有了哪些[Evans]中的戰(zhàn)術(shù)模式?
請(qǐng)記住尿贫,開發(fā)核心域的解決方案是一種關(guān)鍵性業(yè)務(wù)投入电媳。