Noms de méthode pour obtenir des données

Attention: Ceci est une question / discussion pas très sérieuse que je publie … mais je suis prêt à parier que la plupart des développeurs ont réfléchi à cette “question” …

Toujours voulu obtenir d’autres opinions concernant les conventions de nommage pour les méthodes qui allaient et obtenaient des données de quelque part et les renvoyaient …

La plupart des noms de méthodes sont assez simples et évidents … SaveEmployee (), DeleteOrder (), UploadDocument (). Bien entendu, avec les classes, vous utiliserez probablement la forme abrégée … Save (), Delete (), Upload (), respectivement.

Cependant, j’ai toujours eu des difficultés avec l’action initiale … comment obtenir les données. Il semble que pour chaque projet, je finisse par sauter entre différentes conventions de nommage, car je ne suis jamais très satisfait du dernier que j’ai utilisé. Autant que je sache, voici les possibilités ->

  • GetBooks ()
  • FetchBooks ()
  • ResortingeveBooks ()
  • FindBooks ()
  • LoadBooks ()

Quelle est ta pensée?

Il s’agit de sémantique cohérente;

Dans votre titre de question, vous utilisez l’ obtention de données . Ceci est extrêmement général en ce sens que vous devez définir ce que signifie obtenir de manière sémantiquement significative et sans ambiguïté. J’offre les exemples suivants pour vous mettre sur la bonne voie lorsque vous envisagez de nommer des choses.

  1. getBooks() lorsque vous obtenez tous les livres associés à un object, cela signifie que les critères de l’ensemble sont déjà définis et que leur provenance est un détail caché.
  2. findBooks(criteria) est lorsque vous essayez de trouver un sous-ensemble des livres en fonction des parameters de l’appel de la méthode, il sera généralement surchargé avec différents critères de recherche
  3. loadBooks(source) est lorsque vous chargez depuis une source externe, comme un fichier ou une firebase database.
  4. Je ne voudrais pas utiliser fetch / récupérer car ils sont trop vagues et confondus avec get et il n’y a pas de sémantique non ambiguë associée aux termes.

Exemple: fetch implique que certaines entités doivent aller chercher quelque chose de distant et le ramener. Les chiens récupèrent un bâton, et récupérer est un synonyme de fetch avec la sémantique supplémentaire que vous avez peut-être déjà eue en possession de la chose. get est également un synonyme d’ obtention , ce qui implique que vous avez la possession exclusive de quelque chose et que personne d’autre ne peut l’acquérir simultanément.

La sémantique est extrêmement importante:

la twig de la linguistique et de la logique concernée par la signification

Les commentaires sont la preuve que les termes génériques comme get et fetch n’ont pas de sémantique spécifique et sont interprétés différemment par différentes personnes. Choisir une sémantique pour un terme, documenter ce que cela est censé impliquer si la sémantique n’est pas claire et être compatible avec son utilisation.

Des mots avec des significations vagues ou ambiguës sont donnés par des personnes différentes en raison de leurs préjugés et de leurs idées préconçues fondées sur leurs opinions personnelles et qui ne se termineront jamais bien.

La réponse est de restr fidèle à ce que vous êtes à l’aise et d’être cohérent.

Si vous avez un site Web barnes and nobles et que vous utilisez GetBooks (), alors si vous avez un autre élément comme une entité Movie, utilisez GetMovies (). Donc tout ce que vous et votre équipe aimez et soyez cohérent.

Honnêtement, vous devriez simplement décider avec votre équipe quelle convention de nommage utiliser. Mais pour vous amuser, voyons ce que vous pensez de ces choix:

  • GetBooks ()

Cette méthode appartient à une source de données et nous ne nous soucions pas de la manière dont elle les obtient, nous voulons simplement les récupérer depuis la source de données.

  • FetchBooks ()

Vous traitez votre source de données comme un limier, et son travail consiste à récupérer vos livres. Je suppose que vous devriez décider par vous-même combien il peut tenir dans sa bouche à la fois.

  • FindBooks ()

Votre source de données est un bibliothécaire et utilisera le système Dewey Decimal pour trouver vos livres.

  • LoadBooks ()

Ces livres appartiennent à une sorte de “sac à livre électronique” et doivent y être chargés. Veillez à appeler ZipClosed () après le chargement pour éviter de les perdre.

  • ResortingeveBooks ()

Je n’ai rien.

Ce que vous entendez par “obtenir les données” n’est pas clair. De la firebase database? Un fichier? Mémoire?

Mon sharepoint vue sur la dénomination des méthodes est que son rôle est d’éliminer les ambiguïtés et, idéalement, de rechercher la documentation. Je crois que cela devrait être fait même au prix de noms de méthodes plus longs. Selon les études, la plupart des développeurs intermédiaires + sont capables de lire plusieurs mots dans un cas camel. Avec l’EDI et les complétions automatiques, l’écriture de noms de méthode longs n’est pas non plus un problème.

Ainsi, quand je vois “fetchBooks”, sauf si le contexte est très clair (par exemple, une classe nommée BookFetcherFromDatabase), il est ambigu. Le chercher d’où? Quelle est la différence entre chercher et trouver? Vous risquez également que certains développeurs associent la sémantique à certains mots-clés. Par exemple, récupérez la firebase database (ou la mémoire) par rapport à la charge (à partir du fichier) ou au téléchargement (à partir du Web).

Je préférerais voir quelque chose comme “fetchBooksFromDatabase”, “loadBookFromFile”, “findBooksInCollection”, etc. C’est moins visible, mais une fois que vous avez dépassé la longueur, c’est clair. Tout le monde qui lit ceci obtiendra tout de suite ce que vous essayez de faire.

Dans OO (C ++ / Java), j’ai tendance à utiliser getSomething et setSomething car très souvent sinon toujours, j’obtiens un atsortingbut privé de la classe représentant cet object de données ou en le définissant – la paire getter / setter. En plus, Eclipse les génère pour vous.

J’ai tendance à utiliser Load uniquement lorsque je parle de fichiers – comme dans “load in memory” et cela implique généralement le chargement dans des primitives, des structures (C) ou des objects. J’utilise envoyer / recevoir pour le web.

Comme indiqué ci-dessus, la cohérence est tout et cela inclut les développeurs croisés.