Соглашение об именах для методов, которые возвращают различные типы с похожими параметрами - PullRequest
3 голосов
/ 26 апреля 2011

У меня есть SearchService, который использует алгоритм для запроса базы данных и получения результатов. Существует несколько различных форматов, в которых данные могут быть возвращены в зависимости от того, что запрашивающий хочет от службы. Эти форматы:

  • Список сущностей, которые непосредственно соответствуют таблице в базе данных
  • Список первичных ключей (длинных) записей, которые соответствуют
  • Список «результатов поиска», который состоит из набора полей, которые обычно имеют отношение к тому, что пользователь хотел бы видеть из результатов поиска (например, имя человека, адрес, телефонный номер и т. Д.)

В настоящее время мой SearchService выглядит так:

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

Я ищу совет относительно лучших практик в этом отношении. В настоящее время соглашение об именах кажется довольно неуклюжим, и я считаю, что есть лучшее решение, чем то, что я имею сейчас.

Ответы [ 6 ]

8 голосов
/ 26 апреля 2011

Я бы назвал их чем-то простым, например 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);
3 голосов
/ 26 апреля 2011

Я бы назвал их findPeople(), findPeopleIDs() и findPeopleResults().

0 голосов
/ 26 апреля 2011

Одна идея может быть:

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

Затем вы можете возвращать разные вещи в зависимости от того, является ли resultClass персоной.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;
}
0 голосов
/ 26 апреля 2011

В случае, если это не очевидно, не существует реальной схемы именования "наилучшей практики" для этого вида метода.

0 голосов
/ 26 апреля 2011

или вы можете использовать searchBy... подход? хотя я согласен, что означает, что вы будете возвращать те же результаты. Возможно, вы можете немного изменить рефакторинг:

  • поиск ... вернет список (я думаю, идентификаторы в базе данных?)
  • затем добавьте getPeople (List), который фактически возвращает список объектов для этих идентификаторов

так что ваши методы Searc ... всегда возвращают идентификаторы, а затем у вас есть специальные функции для преобразования их в "правильные" результаты поиска?

0 голосов
/ 26 апреля 2011

Если ваша служба может возвращать и другие экземпляры (кроме людей), я бы назвал их

  • findPeopleEntities ()
  • findPeopleIds ()
  • getSearchResult () или getPeopleSearchResult () (обычно вы не находите результаты поиска;))

Если SearchResult используется только для людей, я бы также назвал его PeopleSearchResult. В противном случае я бы дал ему общий параметр, такой как SearchResult<T>, а затем List<SearchResult<People>> getPeopleSearchResult().

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...