2011-07-19 85 views
4

如果我要求已經回答的問題,但是找不到參考,我很抱歉。我的問題是放哪個圖層屬於哪個比較器的最佳位置。例如,我需要一個按用戶排序的用戶對象列表,這些用戶對象按照出生日期,姓氏和名字排序。放置比較器的最佳位置

回答

3

在你的情況下,如果將它放在域類中,並在提取時對它進行排序,意思是有兩種方法(或者更多基於Comaprision類型)在dao上獲得未排序對象列表,例如getUsers()和一個排序列表的方法,例如getSortedUers();當然,你只能有一個排序方法,但如果不需要排序,總是調用一個排序方法是一個頭大的問題。

0

如果您正在使用的數據庫,那麼最好的辦法是把它在查詢本身排序,使用order by

+0

這個問題被標記爲'java'而不是'database'。 –

0

一般的答案是:這取決於一個地方最需要:-)

把它很多關於您的實際設計和體系結構。一般來說,你可以把它放在你的用戶對象的旁邊,或者放到使用它最多(或專用)的圖層中。

3

如果比較器是對象固有的(例如它是排序的唯一方法是有意義的),那麼我只在對象上實現Comparable

如果比較器是衆多其中的一個(例如Comparator實例),並且只在特定上下文中才有意義,那麼我會將比較器類放在該層中。

+0

如果一個對象可以用很多方式進行比較,那麼實現Comparable接口可能不是最好的想法。通過這樣做,可以限制比較對象的方法1.採用Person類。你可能想按出生日期或高度對Person對象進行排序,對吧? – user4205580

0

是的,如果你使用數據庫或一些外部服務,並且可以在那裏排序,那是最好的方法。但是,如果您需要在應用程序中對對象進行排序,則取決於您的架構。有2個變種。如果你只需要排序一次 - 創建匿名類,那麼你不會在這個對象上存儲引用。如果您需要進行多次排序,則可以將其存儲爲類的靜態字段或非靜態字段。

+0

謝謝,但那不是我所抱歉的。 –