2013-04-05 69 views
1

我爲我的表示層使用了Spring MVC,並且還爲我的服務和DAO層使用了Spring。通常我會在MVC的View層中格式化數據(在我的情況下是JSP),但是如果從數據庫中檢索的數據不是標準格式呢?將非標準化數據格式化爲標準格式(視圖,服務或DAO層)的位置?

例如,我從我公司的一個數據庫中提取電話號碼,但它們可能有任何格式(111)-555-1234或1115551234等。這似乎是太多的功能和處理放置在JSP/View層中。我寧願將所有數字都放在其他地方的相同格式中,然後在視圖上重新格式化。在這種情況下我應該在哪裏格式化 - 服務層? DAO?

這也可以讓我利用我無法從JSP調用的庫(或者從JSP調用沒有意義的庫)。

謝謝!

+0

你應該在一些類,它做的格式爲你的關心封裝的電話號碼。 – 2013-04-05 20:00:37

回答

2

我會讓DAO查詢方法從電話號碼中刪除格式化字符,並讓表示層爲它們提供一致的格式(可能在JSP標記中)。我並不喜歡將業務邏輯放在DAO中,但這似乎與數據非常相關。

(其實如果格式代碼首先除去做自己的格式之前的任何預先存在的格式,你也許可以不用其他地方取出格式化字符度日。我就像在一個規範的形式,其具有的東西。)

作爲將格式化字符刪除放入DAO中的替代方法,如果您使用Hibernate,則可以創建custom user types從電話號碼屬性中刪除或插入格式化字符。

+0

謝謝,這對我來說是最有意義的,儘管我同意,只有在它直接處理數據的情況下,它纔會一直做得不好。我在Hibernate中使用JPA,因此也可能會查看自定義用戶類型。 – acvcu 2013-04-16 15:37:28

+0

@acvcu:自定義用戶類型起初看起來有點模糊,但它們派上用場。我想在這裏找到時間想出代碼,我認爲電話號碼格式化會成爲一個很好的例子。 – 2013-04-16 15:51:25

0

我一般不格式化,當我映射模型值對象(VO或任何你想打電話給他們),主要集中在表示層(或者我把一個層中的表現和服務層之間,如果我有太多事情要做)。這會在應用程序的格式中帶來一致性,如果這是您想要的。

時,我想的名字是首字母大寫,我這樣做

BeanUtils.copyProperties(userAccount, userAccountVO, ignoreProperties); 
userAccountVO.setName(StringUtilities.convertToCamelCase(userAccountVO.getName()));