Подтвердить что ты не робот

Имена методов для получения данных

Предупреждение: Это не очень серьезный вопрос/дискуссия, которую я публикую... но я готов поспорить, что большинство разработчиков задумались над этой "проблемой"...

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

Большинство имен методов несколько просты и очевидны... SaveEmployee(), DeleteOrder(), UploadDocument(). Конечно, с классами вы, скорее всего, будете использовать краткую форму... Save(), Delete(), Upload() соответственно.

Однако, я всегда боролся с начальным действием... как получить данные. Кажется, что для каждого проекта я в конечном итоге прыгаю между различными соглашениями об именах, потому что я никогда не доволен последним, что использовал. Насколько я могу судить, это возможности →

  • GetBooks()
  • FetchBooks()
  • RetrieveBooks()
  • FindBooks()
  • LoadBooks()

Какова ваша мысль?

4b9b3361

Ответ 1

Это все о последовательном semantics

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

  • getBooks() - это когда вы получаете все книги, связанные с объекта, это означает, что множество уже определен.
  • findBooks(criteria) когда вы пытаетесь найти подмножество книг, основанных на параметрах вызов метода, это обычно быть перегруженным с помощью другого поиска критерии
  • loadBooks(source) - это когда вы загрузка из внешнего источника, как файл или db.
  • Я бы не использовал fetch/retrieve, потому что они слишком расплывчаты и объединяются с get и нет однозначной семантики, связанной с терминами.

Комментарии являются доказательством того, что общие термины, такие как get и fetch, нет конкретной семантики и интерпретируются по-разному разными люди. Выберите семантический термин, запишите, на что он предназначен подразумевают, что семантика не ясна и согласуется с ее использованием.

Ответ 2

Ответ - это просто придерживаться того, с чем вам удобно, и быть последовательным.

Если у вас есть сайт barnes and nobles, и вы используете GetBooks(), то если у вас есть другой элемент, например объект Movie, используйте GetMovies(). Так что вам и вашей команде нравится и быть последовательным.

Ответ 3

Честно говоря, вы должны просто решить с вашей командой, какое соглашение об именах использовать. Но для удовольствия, давайте посмотрим, каким будет ваш ход мысли, чтобы решить любую из этих проблем:

  • GetBooks()

Этот метод принадлежит источнику данных, и нам все равно, как он их получает, мы просто хотим получить их из источника данных.

  • FetchBooks()

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

  • FindBooks()

Ваш источник данных является библиотекарем и будет использовать систему Dewey Decimal для поиска ваших книг.

  • LoadBooks()

Эти книги принадлежат к какой-то "электронной книжной сумке" и должны быть загружены в нее. Обязательно вызовите ZipClosed() после загрузки, чтобы не потерять их.

  • RetrieveBooks()

У меня ничего нет.

Ответ 4

Неясно, что вы подразумеваете под "получением данных". Из базы данных? Файл? Память?

Мое мнение о наименовании методов заключается в том, что его роль заключается в устранении любых двусмысленностей и, в идеале, необходимости искать документацию. Я считаю, что это нужно делать даже ценой более длинных имен методов. Согласно исследованиям, большинство промежуточных разработчиков + могут читать несколько слов в случае верблюда. С IDE и автоматическим завершением записи длинных имен методов также не проблема.

Таким образом, когда я вижу "fetchBooks", если контекст не очень ясен (например, класс с именем BookFetcherFromDatabase), он неоднозначен. Извлечь его откуда? В чем разница между выборкой и поиском? Вы также рискуете, что некоторые разработчики свяжут семантику с определенными ключевыми словами. Например, выборка для базы данных (или памяти) в зависимости от загрузки (из файла) или загрузки (из Интернета).

Я бы предпочел что-то вроде "fetchBooksFromDatabase", "loadBookFromFile", "findBooksInCollection" и т.д. Это менее наглядно, но как только вы переходите по длине, это понятно. Все, кто читает это, сразу поймут, что вы пытаетесь сделать.

Ответ 5

В OO (С++/Java) я склонен использовать getSomething и setSomething, потому что очень часто, если не всегда, я получаю частный атрибут из класса, представляющего этот объект данных, или устанавливаю его - пару getter/setter. В качестве плюса Eclipse генерирует их для вас.

Я обычно использую Load только тогда, когда я имею в виду файлы - как в "загрузке в память", и это обычно подразумевает загрузку в примитивы, структуры (C) или объекты. Я использую send/receive для Интернета.

Как уже было сказано выше, согласованность - это все, что включает в себя кросс-разработчиков.