我有一个SearchService
,它使用一种算法来查询数据库并恢复结果。根据调用者对服务的要求,可以返回几种不同的格式。这些格式是:
目前我的SearchService看起来像:
public interface SearchService {
public List<People> searchPeopleReturnEntity(SearchRequest request);
public List<Long> searchPeopleReturnId(SearchRequest request);
public List<SearchResult> searchPeopleReturnSearchResult(SearchRequest request);
}
我正在寻找有关此问题的最佳做法的建议。目前,命名惯例似乎很笨重,我相信有一个比我现在更好的解决方案。
答案 0 :(得分:8)
我称之为getPeople
,getIds
,getSearchResults
之类的简单。
如果你需要为人以外的实体使用这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);
答案 1 :(得分:3)
我会称他们为findPeople()
,findPeopleIDs()
和findPeopleResults()
。
答案 2 :(得分:0)
如果您的服务也可以返回其他实例(除了People),我会将它们命名为
如果SearchResult
仅用于人,我还会将其命名为PeopleSearchResult
。否则,我会给它一个通用参数,如SearchResult<T>
,然后是List<SearchResult<People>> getPeopleSearchResult()
。
答案 3 :(得分:0)
或者您可以使用searchBy...
方法?虽然我同意这表示你将返回相同的结果。
也许你可以稍微重构一下:
所以你的searc ...方法总是返回ID,然后你有专门的函数将它们转换成“正确”的搜索结果?
答案 4 :(得分:0)
如果不明显,这种方法没有真正的“最佳实践”命名方案。
答案 5 :(得分: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;
}