Имена методов для получения данных
Предупреждение: Это не очень серьезный вопрос/дискуссия, которую я публикую... но я готов поспорить, что большинство разработчиков задумались над этой "проблемой"...
Всегда хотелось получить другие мнения относительно соглашений об именах для методов, которые пошли и получили данные откуда-то, и вернули его...
Большинство имен методов несколько просты и очевидны... SaveEmployee(), DeleteOrder(), UploadDocument(). Конечно, с классами вы, скорее всего, будете использовать краткую форму... Save(), Delete(), Upload() соответственно.
Однако, я всегда боролся с начальным действием... как получить данные. Кажется, что для каждого проекта я в конечном итоге прыгаю между различными соглашениями об именах, потому что я никогда не доволен последним, что использовал. Насколько я могу судить, это возможности →
- GetBooks()
- FetchBooks()
- RetrieveBooks()
- FindBooks()
- LoadBooks()
Какова ваша мысль?
Ответы
Ответ 1
Это все о последовательном semantics
В заголовке вопроса вы используете получение данных. Это очень общего в том смысле, что вам нужно определить, что означает семантически значительно недвусмысленным образом. Я предлагаю следующее примеры, чтобы, надеюсь, поставить вас на правильный путь, когда думаете о именования вещей.
-
getBooks()
- это когда вы получаете
все книги, связанные с
объекта, это означает, что множество
уже определен.
-
findBooks(criteria)
когда вы пытаетесь найти подмножество
книг, основанных на параметрах
вызов метода, это обычно
быть перегруженным с помощью другого поиска
критерии
-
loadBooks(source)
- это когда вы
загрузка из внешнего источника,
как файл или db.
- Я бы не использовал
fetch/retrieve, потому что они слишком расплывчаты и объединяются с get и нет однозначной семантики, связанной с терминами.
Комментарии являются доказательством того, что общие термины, такие как get и fetch, нет конкретной семантики и интерпретируются по-разному разными люди. Выберите семантический термин, запишите, на что он предназначен подразумевают, что семантика не ясна и согласуется с ее использованием.
Ответ 2
Ответ - это просто придерживаться того, с чем вам удобно, и быть последовательным.
Если у вас есть сайт barnes and nobles, и вы используете GetBooks(), то если у вас есть другой элемент, например объект Movie, используйте GetMovies(). Так что вам и вашей команде нравится и быть последовательным.
Ответ 3
Честно говоря, вы должны просто решить с вашей командой, какое соглашение об именах использовать. Но для удовольствия, давайте посмотрим, каким будет ваш ход мысли, чтобы решить любую из этих проблем:
Этот метод принадлежит источнику данных, и нам все равно, как он их получает, мы просто хотим получить их из источника данных.
Вы относитесь к своему источнику данных, как к ищейке, и его работа заключается в получении ваших книг. Я думаю, вы должны сами решить, сколько он может впиться ему в рот сразу.
Ваш источник данных является библиотекарем и будет использовать систему Dewey Decimal для поиска ваших книг.
Эти книги принадлежат к какой-то "электронной книжной сумке" и должны быть загружены в нее. Обязательно вызовите ZipClosed() после загрузки, чтобы не потерять их.
У меня ничего нет.
Ответ 4
Неясно, что вы подразумеваете под "получением данных". Из базы данных? Файл? Память?
Мое мнение о наименовании методов заключается в том, что его роль заключается в устранении любых двусмысленностей и, в идеале, необходимости искать документацию. Я считаю, что это нужно делать даже ценой более длинных имен методов. Согласно исследованиям, большинство промежуточных разработчиков + могут читать несколько слов в случае верблюда. С IDE и автоматическим завершением записи длинных имен методов также не проблема.
Таким образом, когда я вижу "fetchBooks", если контекст не очень ясен (например, класс с именем BookFetcherFromDatabase), он неоднозначен. Извлечь его откуда? В чем разница между выборкой и поиском? Вы также рискуете, что некоторые разработчики свяжут семантику с определенными ключевыми словами. Например, выборка для базы данных (или памяти) в зависимости от загрузки (из файла) или загрузки (из Интернета).
Я бы предпочел что-то вроде "fetchBooksFromDatabase", "loadBookFromFile", "findBooksInCollection" и т.д. Это менее наглядно, но как только вы переходите по длине, это понятно. Все, кто читает это, сразу поймут, что вы пытаетесь сделать.
Ответ 5
В OO (С++/Java) я склонен использовать getSomething и setSomething, потому что очень часто, если не всегда, я получаю частный атрибут из класса, представляющего этот объект данных, или устанавливаю его - пару getter/setter. В качестве плюса Eclipse генерирует их для вас.
Я обычно использую Load только тогда, когда я имею в виду файлы - как в "загрузке в память", и это обычно подразумевает загрузку в примитивы, структуры (C) или объекты. Я использую send/receive для Интернета.
Как уже было сказано выше, согласованность - это все, что включает в себя кросс-разработчиков.