我已經看到了同樣的事情,很多地方也是如此,到目前爲止,我沒有看到任何的解釋爲什麼。它有什麼好處?這不是人們如何做生意或邏輯系統如何工作的方式。如果我正在從美國進行國際業務,我的系統仍將具有美元的內部基礎。
貨幣作爲事件的邊界條件很重要,因爲您需要匯率。即使是國際銀行。我現在把我所有的毒品錢都寄到開曼羣島,我的錢也可以用美元計算。也許你的是歐元。所以他們得到它,他們做的是將它們轉換成內部使用的任何貨幣,無論是海貝殼。現在他們必須跟上這個問題,但是他們在任何時候都必須知道的是美元/海貝殼之間的匯率以知道它們對我來說有多大,而海貝/歐元知道它們有多少在你身上。這個小東西不會爲他們蹲下來,要麼它是一個價值對象,它怎麼可能?這種情況下的貨幣將固定在賬戶級別,而不是一堆浮動的東西。
一般來說,貨幣將由某些其他東西固定,就像您觀察到的那樣,在行級別。一行數據是相關的,你應該能夠對貨幣值進行數學計算,在這種情況下,連續的貨幣必須是相同的。也許我在歐洲做生意,不得不以歐元報價。我可能希望爲歷史目的記錄兩種貨幣的報價與付款。我質疑這是否是單行設計,但如果我確定是這樣的話,您描述的Money對象是包含兩個組件的單個值對象。它應該被認爲是一個單一的實體,我認爲我在這裏描述的語義上與「貨幣」對象不同,也可以用十進制/貨幣列明確描述,我們不試圖將它們合成爲一首歌; e Money價值,因爲他們無法與他們進行比較或數學完成。
我只是不會走這條路,因爲會導致混淆語義中細微的不一致,並且可能不會增加任何內容。你究竟在哪裏使用它,行貨幣不會給你同樣的東西,通常是以更合理的方式?
但是,如果一個經理堅持要做一些基本上毫無意義或者更糟糕的事情,就NHibernate而言,你已經聲明瞭一個單一的原子實體,Money恰好有2個組件,一個小數和字符串。由於Money現在是一個單一的原子單位,因此您必須始終爲每個金額都包含兩列,因此沒有避免重複列的解決方法。
我最初的反應是:只是與重複共存;它將徹底簡化您的對象模型。 – DanP 2010-11-04 02:14:58