2011-04-26 49 views
3

我有一個SearchService,它使用算法來查詢數據庫並返回結果。根據調用者對服務的需求,數據可以返回爲幾種不同的格式。這些格式是:爲具有相似參數的不同類型返回方法的命名約定

  • 直接對陣表在數據庫實體的名單
  • 的匹配
  • 的「搜索結果」列表中進行記錄的主鍵的列表(多頭),這由一堆一般都是什麼用戶希望從搜索結果看(說一個人的姓名,地址,電話號碼等)

目前我SearchService貌似相關領域的:

public interface SearchService { 
    public List<People> searchPeopleReturnEntity(SearchRequest request); 
    public List<Long> searchPeopleReturnId(SearchRequest request); 
    public List<SearchResult> searchPeopleReturnSearchResult(SearchRequest request); 
} 

我正在尋找有關此方面最佳實踐的建議。目前命名約定看起來非常笨重,我相信現在有更好的解決方案。

回答

3

我會打電話給他們findPeople()findPeopleIDs()findPeopleResults()

+0

這是我一起去的,因爲它包含'搜索'的內涵(而不是正確地返回'get'暗示的一組記錄),此外隱式地告訴調用者它將返回什麼。 – BuffaloBuffalo 2011-04-28 12:38:15

8

我會打電話給他們,像getPeople,getIdsgetSearchResults

如果你需要比其他人的實體,這些相同的3種方法,我會考慮做一些通用的中間類型定義它們,讓你寫的東西是這樣的:

List<People> people = service.getPeople(request).asEntities(); 
List<Long> fooIds = service.getFoos(request).asIds(); 

// or something like this 
List<People> people = service.searchPeople().getEntities(request); 
+3

+1。我會建議'findPeople','findIds'和'findSearchResults' – Jeremy 2011-04-26 15:15:06

+1

@Jeremy:是的,'find'代替'get'也是不錯的。 – ColinD 2011-04-26 15:16:09

0

如果你的服務可以返回其他實例,以及(除了人),我想他們的名字

  • findPeopleEntities()
  • findPeopleIds()
  • getSearchResult()或getPeopleSearchResult()(你一般不找到搜索結果;))

如果SearchResult僅用於人,我也希望它命名爲PeopleSearchResult。否則,我會給它一個通用參數,如SearchResult<T>,然後List<SearchResult<People>> getPeopleSearchResult()

0

或者您可以使用searchBy...的方法?儘管我同意這表示你會返回相同的結果。 也許你可以重構一個位:(?我猜的ID在數據庫中)

  • 搜索...將返回一個列表
  • 再加入getPeople(列表),它實際返回的對象列表對於那些ID的

所以你的searc ...方法總是返回ID的,然後你有專門的功能將這些轉換成「正確」的搜索結果?

+0

我最初開始執行searchBy ..方法,但對於我正在工作的特定域來說,它隱藏了結果匹配的參數,而不是返回類型。例如'searchByName'將意味着結果匹配給定的名稱,而不是返回名稱列表 – BuffaloBuffalo 2011-04-26 16:00:57

0

如果不明顯,這種方法沒有真正的「最佳實踐」命名方案。

0

一個想法可能是:

public <T> T findPeople(SearchRequest request, Class<T> resultClass); 

然後,您可以根據resultClass是否Person.class,Long.class,或SearchResult.class返回不同的東西。

或不太可怕,你可以這樣做:

public <T> T findPeople(SearchRequest request, ResultConverter<T> resultConverter); 

哪裏ResultConverter是這需要某種原始的搜索結果,並返回一個合適的轉換結果的接口。你可以有常見的罐頭實例:

public class ResultConverters { 
    public static final ResultConverter<Long> ID; 
    public static final ResultConverter<Person> PERSON; 
    public static final ResultConverter<SearchResult> SEARCH_RESULT; 
} 
相關問題