??
? ? ? ?天佑武漢,天佑中國(guó)。這次為全國(guó)人民作出巨大犧牲的武漢人是堅(jiān)強(qiáng)和擔(dān)當(dāng)?shù)摹?br>
這次疫情期間的自我隔離的一個(gè)副作用是第一次享受這個(gè)超長(zhǎng)假期,本來(lái)想好好學(xué)習(xí)一下Web技術(shù)的,但家里的唯一一臺(tái)計(jì)算機(jī)被占用,不得已只能停下腳步,繼續(xù)研究一下這個(gè)開源項(xiàng)目的領(lǐng)域模型。
攪拌站的生產(chǎn)管理事是以短期計(jì)劃為核心展開的,每天生產(chǎn)調(diào)度人員根據(jù)工地的需求制定針對(duì)創(chuàng)建一個(gè)“日計(jì)劃”。實(shí)驗(yàn)室人員會(huì)為這個(gè)日計(jì)劃創(chuàng)建生產(chǎn)配方。日計(jì)劃的生產(chǎn)不是連續(xù)性的,他會(huì)分解成很多小的批次計(jì)劃。分解批次計(jì)劃的原因是因?yàn)榛炷恋慕桓队泻芏嗖襟E組成,首先由攪拌站生產(chǎn),再由攪拌車運(yùn)輸?shù)焦さ?,最后由混凝土泵車泵送到指定的澆筑位置。根?jù)這個(gè)生產(chǎn)流程,我們很容易設(shè)計(jì)出模型的最初版本
?
?
再實(shí)際生產(chǎn)過程中,針對(duì)一些特殊的情況,批次計(jì)劃會(huì)增加一些附加的動(dòng)作,常見的有,每天第一批次是會(huì)額外生產(chǎn)一盤的砂漿(用于泵車輸送管的潤(rùn)滑),如果是工地第一次開盤,還要打印質(zhì)保書。這樣在批次計(jì)劃前應(yīng)該增加一個(gè)批次計(jì)劃報(bào)的對(duì)象來(lái)包含這些額外的動(dòng)作。
如果仔細(xì)分析以上對(duì)象,不管是生產(chǎn)計(jì)劃還是附加動(dòng)作或者交付動(dòng)作,他們都可以被執(zhí)行或放棄,都需要跟蹤執(zhí)行的結(jié)果,本質(zhì)上都是一個(gè)可以被執(zhí)行的動(dòng)作對(duì)象。并且可以根據(jù)動(dòng)作執(zhí)行的不同結(jié)果(如因?yàn)檐囕v問題,混凝土沒有送到工地)可以啟動(dòng)一些補(bǔ)償或后續(xù)動(dòng)作。再這里我們可以引入動(dòng)作模式(Martin
Fowler?分析模式)。
? 在動(dòng)作模式下,我們可以通過提議動(dòng)作和執(zhí)行動(dòng)作更加方便的跟蹤動(dòng)作提議和執(zhí)行的差異,比如計(jì)劃給工地送8方混凝土,而因?yàn)榛炷临|(zhì)量問題被退貨。
對(duì)于動(dòng)作執(zhí)行的結(jié)果是否成功,最簡(jiǎn)單的辦法是使用一個(gè)標(biāo)準(zhǔn)屬性。這是方式的弊端在于過于簡(jiǎn)單,以至于我們只能記錄動(dòng)作是否執(zhí)行失敗,無(wú)法記錄失敗的原因。比如送到工地的混凝土的某幾項(xiàng)指標(biāo)不合格而引起的工地退貨。在這里比較好的方法是使用觀察模式,可以觀察和記錄對(duì)混凝土的指標(biāo)的檢驗(yàn)記錄。并且通過觀察的結(jié)果來(lái)判斷動(dòng)作是否成功。這樣可以更加靈活的提供結(jié)果的判斷邏輯。
?
? 在引入了動(dòng)作模式后,我們就可以使用計(jì)劃類型來(lái)實(shí)現(xiàn)對(duì)動(dòng)作的編排和依賴,計(jì)劃實(shí)質(zhì)上是動(dòng)作按順序的聚合(Martin Fowler?分析模式)。
?
這里我們的日計(jì)劃和批次計(jì)劃就可以做為計(jì)劃的子類型,只不過?需要在日計(jì)劃類型里增加一個(gè)分配批次計(jì)劃的方法,同時(shí)在計(jì)劃的超類里面增加產(chǎn)量的屬性。在分配批次計(jì)劃的方法里一般需要制定車輛,這樣就可以按照車輛的運(yùn)輸能力確定批次的產(chǎn)量。在一些特殊的情況下,也可以不指定車輛,這是預(yù)計(jì)生產(chǎn)的產(chǎn)量就按車隊(duì)里所有車輛的最小運(yùn)輸能力設(shè)置批次方量。在一些軟件中,類似的問題會(huì)被放置在詞典中,這并不是個(gè)好的辦法,詞典中大量夾雜著領(lǐng)域邏輯的數(shù)據(jù),詞典本身就是一個(gè)令人費(fèi)解的概念,雖然他能很簡(jiǎn)單的解決不少問題。最小運(yùn)輸能力應(yīng)該由領(lǐng)域模型中的服務(wù)對(duì)象提供。但我們的系統(tǒng)中沒有包含車輛管理的邏輯,所有車輛指派的功能準(zhǔn)備從車輛管理服務(wù)接口獲取。即使這樣,我們也準(zhǔn)備使用策略模式,支持使用內(nèi)置的的車輛管理領(lǐng)域模型。
計(jì)劃的另一個(gè)問題是資源的消耗。我們關(guān)注的資源主要有生產(chǎn)原料的消耗,生產(chǎn)混凝土的攪拌站,運(yùn)輸?shù)臄嚢柢嚭捅盟偷幕炷帘密嚒F渲谢炷翑嚢枵咀鳛橘Y源的占用是領(lǐng)域模型的另一個(gè)重點(diǎn),攪拌車和泵車不作為我們的關(guān)注的核心對(duì)象,攪拌車由其他服務(wù)提供管理,泵車作為資源管理對(duì)于系統(tǒng)沒有什么價(jià)值。這樣我們就可以使用一個(gè)比較簡(jiǎn)化的資源分配模型。
?
在資源分配模型中,最核心的是為提議動(dòng)作分配的預(yù)定的資源,而執(zhí)行動(dòng)作則是實(shí)際消耗的資源,這樣我們就可以精確的統(tǒng)計(jì)實(shí)際消耗的物料,在配合生產(chǎn)動(dòng)作和交付動(dòng)作的完成情況,就可以精確的對(duì)生產(chǎn)完沒交付成功的方量和消耗進(jìn)行準(zhǔn)確的統(tǒng)計(jì)。
以上描述了混凝土攪拌站生產(chǎn)計(jì)劃模型的初步演進(jìn)過程,其中大量借鑒了Martin
Fowler?分析模式。當(dāng)然這知識(shí)初步的模型,還有很多不合理的地方等著我們?nèi)ブ貥?gòu)。
在使用領(lǐng)域模型后,每次流程處理和執(zhí)行會(huì)設(shè)計(jì)到大量的領(lǐng)域?qū)ο?,這樣會(huì)對(duì)UI層的調(diào)用產(chǎn)生巨大的困難,并且當(dāng)UI層設(shè)計(jì)到大量的領(lǐng)域?qū)ο髸r(shí),必然會(huì)帶來(lái)領(lǐng)域知識(shí)的泄露,為此,我們會(huì)在增加一個(gè)應(yīng)用層,來(lái)封裝對(duì)領(lǐng)域模型的調(diào)用同時(shí)提供簡(jiǎn)單的接口?,F(xiàn)在軟件的人際交互的要求越來(lái)越高,在這方面,可以通過可頁(yè)面緊密相關(guān)的門面對(duì)象(Facade)實(shí)現(xiàn)。使用領(lǐng)域模型對(duì)數(shù)據(jù)的存儲(chǔ)也是個(gè)巨大的挑戰(zhàn),幸好現(xiàn)在有很多成熟的解決方案甚至技術(shù)框架能幫我們實(shí)現(xiàn)對(duì)象到數(shù)據(jù)庫(kù)的映射。
?
?
?
?
熱門工具 換一換