web-dev-qa-db-fra.com

Noms de méthode pour obtenir des données

Attention: Ceci est une question/discussion peu sérieuse que je poste ... mais je suis prêt à parier que la plupart des développeurs ont réfléchi à ce "problème" ...

J'ai toujours voulu obtenir d'autres opinions concernant les conventions de dénomination pour les méthodes qui allaient chercher des données quelque part et les renvoyaient ...

La plupart des noms de méthode sont quelque peu simples et évidents ... SaveEmployee (), DeleteOrder (), UploadDocument (). Bien sûr, avec les classes, vous utiliserez très probablement le formulaire court ... Save (), Delete (), Upload () respectivement.

Cependant, j'ai toujours eu du mal avec l'action initiale ... comment obtenir les données. Il semble que pour chaque projet, je finis par sauter entre différentes conventions de nommage parce que je ne suis jamais très satisfait du dernier que j'ai utilisé. Autant que je sache, ce sont les possibilités ->

  • GetBooks ()
  • FetchBooks ()
  • Récupérer des livres ()
  • FindBooks ()
  • LoadBooks ()

Quelle est ta pensée?

85
Jason

Il s'agit de cohérence sémantique ;

Dans le titre de votre question, vous utilisez obtention de données. Ceci est extrêmement général dans le sens où vous devez définir ce que obtenir signifie de manière sémantiquement significativement non ambiguë. J'offre les exemples suivants pour, espérons-le, vous mettre sur la bonne voie lorsque vous pensez à nommer des choses.

  1. getBooks() est lorsque vous obtenez tous les livres associés à un objet, cela implique que les critères pour l'ensemble sont déjà définis et d'où ils viennent est un détail caché.
  2. findBooks(criteria) est lorsque vous essayez de trouver un sous-ensemble des livres en fonction des paramètres de l'appel de méthode, cela sera généralement surchargé avec différents critères de recherche
  3. loadBooks(source) est lorsque vous chargez à partir d'une source externe, comme un fichier ou une base de données.
  4. Je n'utiliserais pas fetch/retrieve car ils sont trop vagues et sont confondus avec get et il n'y a pas de sémantique sans ambiguïté associée aux termes.

Exemple: fetch implique qu'une entité doit aller chercher quelque chose qui est 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 pourriez avoir eu en possession de la chose avant aussi. obtenez est un synonyme de obtenez également, ce qui implique que vous avez la possession exclusive de quelque chose et personne d'autre ne peut l'acquérir simultanément.

Sémantique sont extrêmement importants:

la branche de la linguistique et de la logique concernée par le sens

Les commentaires prouvent 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. Choisissez une sémantique pour un terme, documentez ce qu'elle est censée impliquer si la sémantique n'est pas claire et cohérente avec son utilisation.

les mots avec des significations vagues ou ambigües reçoivent une sémantique différente selon les personnes en raison de leurs préjugés et de leurs idées préconçues basées sur leurs opinions personnelles et cela ne finira jamais bien.

109
user177800

Honnêtement, vous devez simplement décider avec votre équipe de la convention de dénomination à utiliser. Mais pour le plaisir, voyons ce que serait votre pensée pour décider de l'un de ces éléments:

  • GetBooks ()

Cette méthode appartient à une source de données, et peu nous importe comment elle les obtient, nous voulons simplement les obtenir à partir de la source de données.

  • FetchBooks ()

Vous traitez votre source de données comme un limier, et c'est son travail d'aller chercher vos livres. Je suppose que vous devriez décider vous-même combien il peut en 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 de livre électronique" et doivent y être chargés. Assurez-vous d'appeler ZipClosed () après le chargement pour éviter de les perdre.

  • Récupérer des livres ()

Je n'ai rien.

10
Nick Larsen

La réponse est de s'en tenir à 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.

8
JonH

Ce que vous entendez par "obtenir les données" n'est pas clair. De la base de données? Un fichier? Mémoire?

Mon point de vue sur la dénomination des méthodes est que son rôle est d'éliminer toute ambiguïté et, idéalement, la nécessité de consulter la documentation. Je crois que cela devrait être fait même au prix de noms de méthode plus longs. Selon les études, la plupart des développeurs intermédiaires + sont capables de lire plusieurs mots en cas de chameau. Avec IDE et complétion automatique, l'écriture de noms de méthode longs n'est pas non plus un problème.

Ainsi, lorsque je vois "fetchBooks", à moins que le contexte ne soit 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 rechercher? Vous risquez également que certains développeurs associent la sémantique à certains mots clés. Par exemple, récupérer la base de données (ou la mémoire) par rapport à la charge (à partir d'un fichier) ou le télécharger (à partir du Web).

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

1
Uri

Dans OO (C++/Java), j'ai tendance à utiliser getSomething et setSomething parce que très souvent sinon toujours, je reçois un attribut privé de la classe représentant cet objet de données ou le définit - le getter/paire setter. En plus, Eclipse les génère pour vous.

J'ai tendance à utiliser Load uniquement lorsque je veux dire des fichiers - comme dans "charger en mémoire" et cela implique généralement un chargement dans des primitives, des structures (C) ou des objets. J'utilise envoyer/recevoir pour le web.

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

1
user257111