分析模式 - 度量与测绘
生活随笔
收集整理的這篇文章主要介紹了
分析模式 - 度量与测绘
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
數(shù)量(Quantity)
對象模型:????????????????????????????????????????????????????????????????????????????????????????????????????????????? 數(shù)據(jù)模型:
Unit: 單位主表,一般保存度量單位的代碼、文本描述(可能需要處理多語言問題)等
Unit_Ratio: 單位轉(zhuǎn)換率
Quantity主要封裝與單位相關(guān)的邏輯,例如:
person1.Height.Add(8.5, Unit.Get("cm"));
person1.Height.Add(0.03,?Unit.Get("m"));
Quantity?diff?=?person1.Height?-?person2.Height; 單位處理邏輯中一個主要功能是單位轉(zhuǎn)換運算,例如Quantity相減的操作符重載代碼類似如下:
public?static?Quantity?operator?-(Quantity?left,?Quantity?right)
{
????Quantity?diff?=?new?Quantity(left._amount,?left._unit);
????diff._amount?+=?right._amount?*?right._unit.Ratio(left._unit);
????return?diff;
}
度量(Measurement)
度量是對數(shù)量模式的進一步抽象,書中以體檢為例,進行一次體檢就是得到一組各方面的度量數(shù)據(jù),例如身高、體重、血壓等,如果象上面那樣在一個表中使用不同字段存儲各個指標以及單位,自段會非常多,因此有了下面這個模式
對象模型:
???
數(shù)據(jù)模型:
???
PhenomenonType2: 度量類型,例如長度、重量、體積等,每種度量類型關(guān)聯(lián)多個度量單位(Unit)
示例數(shù)據(jù):
???
???
1. 某個人體檢結(jié)果(實際上應(yīng)當(dāng)有個體檢對象)的各種度量(PhenomenonType)指標均保存在Measurement中
2. 對象模型中Measurement與Quantity分開,各司其職
3. 界面上讓用戶選擇單位時可以根據(jù)度量類型(PhenomenonType)縮小可選擇單位的范圍,例如身高這個屬性只能選擇長度單位
4. 對于每種度量類型可以維護一個基本單位(Is_Basic),系統(tǒng)一些內(nèi)部運算以基本單位為準,例如財務(wù)、庫存的交易、月結(jié)盤點,ERP的MRP運算等
?? 為簡化終端用戶對單位轉(zhuǎn)換率的維護工作,可以只維護每種單位到基本單位的轉(zhuǎn)換率,系統(tǒng)自動計算同一度量類型中任意兩種單位之間的轉(zhuǎn)換率,但系統(tǒng)也可以不將這個邏輯硬編碼而做的更靈活,這是一種基本的業(yè)務(wù)設(shè)計、指導(dǎo)方式
測繪(Observation)
測繪是對上面兩種模式的進一步抽象
度量模式雖然使用度量類型帶來了更大的靈活性通用性,但考慮的仍然是 "數(shù)量+單位" 這種測量類型,以色盲這一體檢項目為例,它仍然是一個評測指標,但評測結(jié)果一般表現(xiàn)為一組可選值: A類紅色盲、B類紅色盲、B類紅色弱、B類綠色弱等
所以提取一個測繪基類(Observation),從它派生出兩種類型: 度量(Measurement)和分類評測(CategoryObservation)
對象模型:
???
數(shù)據(jù)模型:
???
CagegoryOption3: 每種分類評測(CategoryObservation)類型可選值列表
PhenomennonType3: 添加一個Observation_Type字段用來區(qū)分屬于哪種測繪類型,例如1: Measurement, 2: CategoryObservation
用面向?qū)ο蟮氖侄?#xff0c;Measurement3、CategoryObservation3與Observation3之間為實現(xiàn)接口或繼承基類的關(guān)系;使用結(jié)構(gòu)化設(shè)計手段,他們之間只是弱關(guān)聯(lián)關(guān)系,Martin在書中實現(xiàn)泛化一節(jié)有詳細說明
上面圖例可以理解為使用單表繼承(Single table inheritance)實現(xiàn)這個繼承關(guān)系,對于Measurement子類型Category_Option字段無效,對于CategoryObservation子類型Amount和Unit字段無效;CategoryObservation3和Measurement3因為行為上的差異而需要使用不同子類實現(xiàn),Measurement3與Quantity3同樣因為關(guān)注的職責(zé)不同而分離開;圖中明顯表現(xiàn)出多余、重復(fù)的氣味,所以并不是一個優(yōu)化設(shè)計方案,但對于理解Martin講的Observation是什么正合適
轉(zhuǎn)換率的時效性
指單位之間的轉(zhuǎn)換隨時間浮動,典型的是各種幣別之間的匯率,這種情況下轉(zhuǎn)換率需要添加有效時間范圍,例如:
???????
對象模型:????????????????????????????????????????????????????????????????????????????????????????????????????????????? 數(shù)據(jù)模型:
Unit: 單位主表,一般保存度量單位的代碼、文本描述(可能需要處理多語言問題)等
Unit_Ratio: 單位轉(zhuǎn)換率
Quantity主要封裝與單位相關(guān)的邏輯,例如:
person1.Height.Add(8.5, Unit.Get("cm"));
person1.Height.Add(0.03,?Unit.Get("m"));
Quantity?diff?=?person1.Height?-?person2.Height; 單位處理邏輯中一個主要功能是單位轉(zhuǎn)換運算,例如Quantity相減的操作符重載代碼類似如下:
public?static?Quantity?operator?-(Quantity?left,?Quantity?right)
{
????Quantity?diff?=?new?Quantity(left._amount,?left._unit);
????diff._amount?+=?right._amount?*?right._unit.Ratio(left._unit);
????return?diff;
}
度量(Measurement)
度量是對數(shù)量模式的進一步抽象,書中以體檢為例,進行一次體檢就是得到一組各方面的度量數(shù)據(jù),例如身高、體重、血壓等,如果象上面那樣在一個表中使用不同字段存儲各個指標以及單位,自段會非常多,因此有了下面這個模式
對象模型:
???
數(shù)據(jù)模型:
???
PhenomenonType2: 度量類型,例如長度、重量、體積等,每種度量類型關(guān)聯(lián)多個度量單位(Unit)
示例數(shù)據(jù):
???
???
1. 某個人體檢結(jié)果(實際上應(yīng)當(dāng)有個體檢對象)的各種度量(PhenomenonType)指標均保存在Measurement中
2. 對象模型中Measurement與Quantity分開,各司其職
3. 界面上讓用戶選擇單位時可以根據(jù)度量類型(PhenomenonType)縮小可選擇單位的范圍,例如身高這個屬性只能選擇長度單位
4. 對于每種度量類型可以維護一個基本單位(Is_Basic),系統(tǒng)一些內(nèi)部運算以基本單位為準,例如財務(wù)、庫存的交易、月結(jié)盤點,ERP的MRP運算等
?? 為簡化終端用戶對單位轉(zhuǎn)換率的維護工作,可以只維護每種單位到基本單位的轉(zhuǎn)換率,系統(tǒng)自動計算同一度量類型中任意兩種單位之間的轉(zhuǎn)換率,但系統(tǒng)也可以不將這個邏輯硬編碼而做的更靈活,這是一種基本的業(yè)務(wù)設(shè)計、指導(dǎo)方式
測繪(Observation)
測繪是對上面兩種模式的進一步抽象
度量模式雖然使用度量類型帶來了更大的靈活性通用性,但考慮的仍然是 "數(shù)量+單位" 這種測量類型,以色盲這一體檢項目為例,它仍然是一個評測指標,但評測結(jié)果一般表現(xiàn)為一組可選值: A類紅色盲、B類紅色盲、B類紅色弱、B類綠色弱等
所以提取一個測繪基類(Observation),從它派生出兩種類型: 度量(Measurement)和分類評測(CategoryObservation)
對象模型:
???
數(shù)據(jù)模型:
???
CagegoryOption3: 每種分類評測(CategoryObservation)類型可選值列表
PhenomennonType3: 添加一個Observation_Type字段用來區(qū)分屬于哪種測繪類型,例如1: Measurement, 2: CategoryObservation
用面向?qū)ο蟮氖侄?#xff0c;Measurement3、CategoryObservation3與Observation3之間為實現(xiàn)接口或繼承基類的關(guān)系;使用結(jié)構(gòu)化設(shè)計手段,他們之間只是弱關(guān)聯(lián)關(guān)系,Martin在書中實現(xiàn)泛化一節(jié)有詳細說明
上面圖例可以理解為使用單表繼承(Single table inheritance)實現(xiàn)這個繼承關(guān)系,對于Measurement子類型Category_Option字段無效,對于CategoryObservation子類型Amount和Unit字段無效;CategoryObservation3和Measurement3因為行為上的差異而需要使用不同子類實現(xiàn),Measurement3與Quantity3同樣因為關(guān)注的職責(zé)不同而分離開;圖中明顯表現(xiàn)出多余、重復(fù)的氣味,所以并不是一個優(yōu)化設(shè)計方案,但對于理解Martin講的Observation是什么正合適
轉(zhuǎn)換率的時效性
指單位之間的轉(zhuǎn)換隨時間浮動,典型的是各種幣別之間的匯率,這種情況下轉(zhuǎn)換率需要添加有效時間范圍,例如:
???????
轉(zhuǎn)載于:https://www.cnblogs.com/RicCC/archive/2008/04/26/analysis-patterns-measurement-and-observation.html
總結(jié)
以上是生活随笔為你收集整理的分析模式 - 度量与测绘的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 数据远程实时备份容灾方案
- 下一篇: 第10章 常用功能及函数集;客户端IP地