2011-11-03 129 views
3

我只是寫了一個小型的asp.net網頁,通過綁定到一箇中繼器來顯示一個對象的集合,當想到這一點。這種情況下最好的做法是什麼?

基本上我創建的類,我們稱之爲'測試',有一個價值屬性是一個整數數據類型(忽略使用這種類型的限制,我只是用它作爲例子)。然而,我想格式化這個屬性,所以它顯示一個貨幣和正確的小數位等

是最好的做法,有一個函數內的類返回對象的格式化字符串,或者是更好有在我的web後端的一個函數形式對對象進行操作並返回格式化的字符串?

我以前聽說過一個類應該包含所有它的相對函數,但我也聽說應該將演示文稿保存在我的N層應用程序的「表示層」中。

在我的情況下最好的方法是什麼? (並且道歉,如果我沒有足夠清楚地解釋這個!)

謝謝!

+0

這應該是一個輔助方法。由於您所談論的情況是針對一種常見的格式,因此我會創建一個輔助類來保存這些常用方法,並使用該輔助類的方法來獲取格式化的字符串。輔助方法的輸入值應直接從數據實例中提供。如果您將這種格式化方法添加到數據類中,則會針對數據類的污染採取步驟#1 - 在嘗試爲其他數據成員添加更多此類格式化方法的過程中,把'toCurrency'等放在那裏。只是我的想法! – Zabba

回答

2

在我看來,從OO的觀點來看,這兩個選項都是有效的。

  • 由於價值價格(即恰好有錯誤的數據類型),它是有道理的把格式化成數據類。這不是特定於Web界面的東西,而且,如果您開發不同類型的用戶界面,則很可能需要再次進行格式設置。

  • 另一方面,這是一個演示問題,因此將它放入表示層也是有意義的。

+0

我想這就是爲什麼我很困惑,哈! – alimac83

1

對於一般的面向對象的東西,該對象不應該公開實現細節。我選擇將其解釋爲「儘可能避免使用setters和getters」。

在你的問題的上下文中,我建議你有一個getPriceDisplay()方法,它返回一個包含格式化價格的字符串。

格式的實際實現隱藏在實現細節中。您可以提供格式化的通用函數,使用一些後端調用或其他。這些細節應該對「測試」對象的使用者沒有任何影響。

+0

所以你認爲getPriceDisplay()函數應該在我的'Test'類中?或者在我的web窗體的代碼背後? 我想,把它放在我的'測試'類中會更有意義,但我不確定。感謝您的幫助:-) – alimac83

+0

價格存儲在Test內的方式是一個實現細節。價格被格式化爲貨幣顯示值的方式是實現細節。兩者都屬於Test類或Heinzi提到的Test模型類的表示層類。 – DwB

1

雖然這不是一種面向對象的方法,但在我看來,這是一個擴展方法的好時機。將其稱爲.ToCurrency(),它具有貨幣格式...如果需要,可以從Web.Config文件中獲取。

編輯

爲了詳細說明,我會簡單地調用.ToString("your-format")(當然這可能是您的具體問題就這麼簡單.ToString("C"))的擴展方法。這允許您在一個地方更改整個UI的格式。在Web應用程序中處理DateTime格式時,我發現這非常有用。

+0

其實我_think_ .net允許您使用.ToString()方法轉換爲貨幣,但我不是100%確定。我實際上並沒有試圖找出如何轉換爲貨幣..只是用它作爲例子,但謝謝! :-) – alimac83

+0

@ alimac83你是對的,你可以使用.ToString(「你的格式」),我的建議是在擴展方法下使用它。這樣,如果無論出於何種原因格式需要更改,無論您在哪裏顯示,都會調用擴展方法。 – Craig

0

會不會.ToString("C");做的工作?這將在我想象的表示層中。

相關問題