《領域模型》 設計模式應用於模型

2022-03-15 07:06:10 字數 1745 閱讀 3732

在設計模式中,有些模式可以用作領域模型,但是這些使用的時候需要變換一下重點。設計模式中把相關設計元素歸為一類,這些元素能夠解決在各種上下文中經常遇到的問題,這些模式的動機以及模式本身都是從純技術角度描述,但這些元素中的一部分在更廣泛的領域和設計上下文中也使用,因為這些元素對應的基本概念在很多領域中都會出現。

模式:strategy(策略模式、也稱為policy)

strategy——定義了一組演算法,將每個演算法封裝起來,並使他可以互換。strategy允許演算法獨立與使用他的客戶而變化。

領域模型包含一些並非用於解決技術問題的過程,將他們包含進來是因為他們對處理問題領域具有價值。當必須從多個過程中進行選擇時,選擇的複雜性再加上多個過程本身的複雜性會使局面失去控制。當對過程進行建模時,我們經常會發現不止一種合理的建模方式,如果都寫到過程定義中,就會變得臃腫而複雜,行為描述也會因為混雜在其他行為中而模糊不清,所以希望把這些選擇從過程的主體概念中,這樣技能看清主體概念也能看清選擇,strategy就是為了解決這個問題的,雖然strategy側重與技術方面,但在這裡我們把他當成模型中的乙個概念使用,同樣把過程中極易發生變化的部份與穩定的部分分離。

因此易變化的部分提取到模型的「策略」物件。將規則與他所控制的行為區分開,按照strategy來實現規則或可替換的過程。策略物件的多個版本表示完成過程的不同方式。

示例:路線查詢(route-finding)策略

把乙個route specification(路線規格)傳遞給routing service(路線服務),routing service的工作是構造乙個滿足specification的詳細的itinerary。這個service是乙個優化引擎,可以通過調節它來查詢最快的路線或最便宜的路線。 

仔細觀察路線**就會發現,每個計算中都有條件判斷,匯出都是判斷最快還是最便宜的邏輯,當為了做出更精細的航線選擇而把新標準新增進來時,麻煩會更多。

解決方法是把這些起調節作用的引數分離到strategy中。使之明確的標識出來,並作為引數傳遞給routing service。現在routing service就可以用一種完全相同的、無需條件判斷的方法來處理所有請求了,它按照leg magnitude policy(航段規模策略)的計算,找出一些裡規模較小的leg。

這種設計具有設計模式中的strategy模式的優點,現在可以通過安裝適當的leg magnitude policy來控制和擴充套件 routing service的行為。如圖中顯示的只是最明顯的2種strategy。可能還會有一些在速度和價錢之前權衡的策略,也可以加入其他因素,例如在預定貨物時郵件選擇公司自己的運輸系統,而不是外包其他運算公司,當然不用策略模式也能實現這種擴充套件,但這樣還是要在routing service內部去修改,這就會使介面變得越來越臃腫,介面可以令routing service更清楚且容易測試。

現在,領域中的乙個只管重要的規則明確的顯示了出來,也就是構建在路線時選擇leg的基本規則。他傳遞了這樣乙個知識:路線選擇的基礎是航段的乙個特定屬性,這個屬性最後可鬼節為乙個數字。這樣我們可以在領域語言中用一句簡單的話來定義routing service的行為:routing service根據所選定的策略來選擇航段總規模最小的路線。

我們在領域中使用技術設計模式時,必須認識到另一種動機,也是它的另一層含義,當所使用的策略對應與某種實際業務的策略時,模式就不再僅僅是一種游泳的實現技術了。

第十二章 將設計模式應用於模型

為什麼沒有第11章?11章將了應用分析模式,沒咋看懂,東西也不多。如有需要可以看 分析模式 一書。一 模式 strategy 也稱policy why?領域模型包含一些並非用於結局技術問題的過程,將它們包含進來是因為它們處理問題領域具有實際的價值。當必須從多個過程中進行選擇時,選擇的複雜性加上過程本...

區塊鏈適合應用於哪些領域

區塊鏈是去中心化的價值傳輸體系,具有資訊公開透明不可篡改,全球聯通且交易成本低等特點,適合運用於暫時無信任中心,解決信任的成本非常高。跨中心間價值傳輸的領域,目前區塊鏈的應用領域廣泛,檔案管理,專利保護等社會管理領域。物品溯源,防偽等物聯網領域,慈善捐款等公益領域,均運用了區塊鏈上資訊公開透明且不可...

Python被應用於在眾多領域

人工智慧的首選語言為什麼是python?python因其容易上手的特點迅速成為科學家的工具,積累了大量人工智慧的工具庫 架構,谷歌tensorflow就是其中之一。人工智慧涉及大量的資料計算,python有非常多優秀的深度學習庫可供使用,大部分人工智慧框架都支援python。大量人工智慧的工具庫 架...