命名约定用于返回具有类似参数的不同类型的方法

时间:2011-04-26 15:11:11

标签: java naming-conventions

我有一个SearchService,它使用一种算法来查询数据库并恢复结果。根据调用者对服务的要求,可以返回几种不同的格式。这些格式是:

  • 与数据库中的表直接匹配的实体列表
  • 匹配的记录的主键(Longs)列表
  • “搜索结果”列表,其中包含一系列通常与用户希望从搜索结果中看到的字段相关的字段(例如人名,地址电话号码等)

目前我的SearchService看起来像:

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

我正在寻找有关此问题的最佳做法的建议。目前,命名惯例似乎很笨重,我相信有一个比我现在更好的解决方案。

6 个答案:

答案 0 :(得分:8)

我称之为getPeoplegetIdsgetSearchResults之类的简单。

如果你需要为人以外的实体使用这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),我会将它们命名为

  • findPeopleEntities()
  • findPeopleIds()
  • getSearchResult()或getPeopleSearchResult()(您通常不会找到搜索结果;))

如果SearchResult仅用于人,我还会将其命名为PeopleSearchResult。否则,我会给它一个通用参数,如SearchResult<T>,然后是List<SearchResult<People>> getPeopleSearchResult()

答案 3 :(得分:0)

或者您可以使用searchBy...方法?虽然我同意这表示你将返回相同的结果。 也许你可以稍微重构一下:

  • search ...会返回一个List(我猜数据库中的ID?)
  • 然后添加一个getPeople(List),它实际上返回那些ID
  • 的对象列表

所以你的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;
}