所以我有一個值object
,(任意說錢),我想實現它的平等。我知道==
和.Equals()
(參考和數據相等)的預期/默認行爲。DDD值對象相等,== vs .Equals()
在這種情況下,雖然,我希望能夠比較兩個對象,並說他們是等價的計算(例如1M和3英尺是等同的) 然而,對於持久性(使用NHibernate
,其中isDirty
我覺得要看平等),用戶顯示和貨幣選擇,我希望他們被認爲是不同的。
我應該在這種情況下,
- 有不同的行爲
==
和.Equals()
(和應該做的事情), - 無論我想檢查等價,只是檢查每個屬性(意味着額外的代碼)
- 實現像
.IsEquivalent()
的方法(我寧願不要做後者) - 別的東西,我錯過
我應該遵循最佳做法/模式嗎? 謝謝
編輯: 我收到了一些有關匯率變化的回覆。爲了清晰起見進行更新讓說的高度,而不是貨幣
- 我想澄清,一些假設:
- //忽視:值對象包含小數量,串/班幣
- //忽視:匯率做不變。
- //忽略:類貨幣知道其exhange速率向和從其他
- 值對象包含十進制數量,串/類單元
- 類單元知道它的轉換,並從其他的
- 我不打算擴大率/轉換等
我更關心的是實踐和模式,而不是實施貨幣。 基本上,對於一個人的身高來說,同樣的方法,其中身高是價值對象,({1,m}到{3,ft},其中1m總是「等於」/「相當於」3ft)
跟3)它比1更乾淨)。您還需要傳入一個代表不同貨幣的交易價格的對象,所以這甚至不適合'=='或'Equals'的方法簽名。 – CodesInChaos