Имена методов для получения данных [закрыто]


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

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

большинство имен методов несколько просты и очевидны... SaveEmployee(), DeleteOrder (), UploadDocument (). Конечно, с классами вы, скорее всего, будете использовать краткая форма...Сохранить(), удалить (), загрузить () соответственно.

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

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

Что вы думаете?

5 66

5 ответов:

- Это все о соответствии семантика;

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

  1. getBooks() когда вы получаете вся книга связанные с объект, из него следует, что критерием для множества является уже определены и откуда они берутся-это скрытая деталь.
  2. findBooks(criteria) это когда вы пытаетесь найти подмножество книг на основе параметров вызов метода, это обычно быть перегружена различными поиск критерии
  3. loadBooks(source) когда вы загрузка с внешнего источника, как файл или БД.
  4. я бы не стал использовать fetch/retrieve, потому что они слишком расплывчаты и получают сливается с get и нет однозначной семантики, связанной с терминами.

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

семантика очень важно:

раздел лингвистики и логики, связанный со значением

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

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

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

  • GetBooks()

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

  • FetchBooks ()

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

  • FindBooks ()

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

  • LoadBooks ()

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

  • RetrieveBooks()

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

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

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

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

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

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

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

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

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

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