貨幣作為值

2003 年 8 月 26 日

有許多 值物件 的常見範例,我最喜歡的是 貨幣,而與貨幣密切相關的是貨幣單位。

對於許多系統來說,貨幣單位作為值運作良好,您需要的主要部分是國際公認的貨幣代碼(例如美元的 USD)。

然而,我曾經參與過一個系統,那裡變得更有趣。如果我的記憶力沒錯的話,他們希望從貨幣單位中獲得的其中一件事是「點值」。在他們的 UI 上,他們有輕推按鈕,可以將貨幣單位向上或向下輕推。每個貨幣單位都有自己的點值,而且這個點值可能會改變。它不會經常改變,但確實會改變。這違反了一個非常有用的值物件規則,即它們是不可變的。

我們所做的解決方案是使用兩個貨幣單位類別。一個是值物件,它包含貨幣代碼,也許還有其他一些不可變的東西。第二個是參考物件(我想我們稱它們為 CurrencyValue 和 CurrencyReference 之類的東西)。值物件大部分時間都會傳遞,但值物件中的一些方法,例如點值,會委派給參考物件,而參考物件主要是靜態資料。參考物件保存在由貨幣代碼編制的查詢表中(這不是唯一的方法)。

這種雙語義行為是不尋常的,這是唯一一次我看到它。當然,大多數系統都可以使用簡單的值物件來處理貨幣單位。