Je suppose que la plupart des méthodes de type usine commencent par create
. Mais pourquoi sont-ils appelés « créer »? Pourquoi pas « faire », « produire », « construire », « générer » ou autre chose? Est-ce seulement une question de goût? Une convention? Ou y a-t-il une signification particulière dans «créer»?
createURI(...)
makeURI(...)
produceURI(...)
buildURI(...)
generateURI(...)
Lequel choisiriez-vous en général et pourquoi?
createXyz()
.create
préfixe par convention pour des raisons de cohérence de l'API et aussi parce que le simple fait de taper la lettre lesc
ferait tous apparaître dans l'auto-complétion de l'EDI, ce qui faciliterait les choses pour quelqu'un qui essaie d'apprendre ce qui est disponible. J'aurais dûMatrix4f.identity()
,Matrix4f.transpose()
etc. , mais ils seraient plus rapides à trouver commeMatrix4f.createIdentity()
etMatrix4f.createTranspose(...)
, etc.Réponses:
Quelques pensées aléatoires:
«Créer» correspond mieux à la fonctionnalité que la plupart des autres mots. Le deuxième meilleur mot auquel je puisse penser est «Construct». Dans le passé, 'Alloc' (allocate) aurait pu être utilisé dans des situations similaires, reflétant la plus grande importance accordée aux blocs de données qu'aux objets dans des langages comme C.
«Créer» est un mot court et simple qui a une signification claire et intuitive. Dans la plupart des cas, les gens le choisissent probablement comme le premier mot le plus évident qui leur vient à l'esprit lorsqu'ils souhaitent créer quelque chose. C'est une convention de dénomination courante, et la «création d'objets» est une manière courante de décrire le processus de ... création d'objets.
'Construct' est proche, mais il est généralement utilisé pour décrire une étape spécifique du processus de création d'un objet (allouer / nouveau, construire, initialiser ...)
«Construire» et «Créer» sont des termes courants pour les processus relatifs à la compilation de code, ils ont donc des connotations différentes pour les programmeurs, ce qui implique un processus qui comprend de nombreuses étapes et peut-être beaucoup d'activité de disque. Cependant, l'idée d'une usine "construisant" quelque chose est une idée sensée - en particulier dans les cas où une structure de données complexe est construite, ou de nombreuses informations séparées sont combinées d'une manière ou d'une autre.
«Générer» pour moi implique un calcul qui est utilisé pour produire une valeur à partir d'une entrée, comme la génération d'un code de hachage ou d'un nombre aléatoire.
«Produire», «Générer», «Construire» sont plus longs à taper / lire que «Créer». Historiquement, les programmeurs ont privilégié les noms courts pour réduire la saisie / lecture.
la source
Joshua Bloch dans "Effective Java" suggère les conventions de dénomination suivantes
la source
from
? Par exemple, prendre unId.of("abc")
vs hypothétiqueId.from("xyz")
… oufrom
suggérerait plus de logique (par exemple, analyse de l'entrée, recherche / corrélation à partir de / avec d'autres données,…)? Il est vraiment difficile de rechercher "of vs from": DJe voulais ajouter quelques points que je ne vois pas dans les autres réponses.
Bien que traditionnellement «Usine» signifie «crée des objets», j'aime à penser plus largement que «me renvoie un objet qui se comporte comme je l'attends». Je ne devrais pas toujours avoir à savoir si c'est un tout nouvel objet , en fait je m'en fiche. Donc, dans les cas appropriés, vous pouvez éviter un nom «Créer ...», même si c'est ainsi que vous l'implémentez en ce moment.
Guava est un bon référentiel d'idées de dénomination d'usine. Il popularise un joli style DSL. exemples:
la source
«Créer» et «faire» sont courts, raisonnablement évocateurs et ne sont pas liés à d'autres modèles de dénomination auxquels je peux penser. J'ai également vu les deux assez fréquemment et je soupçonne qu'il s'agit peut-être de "normes de facto". J'en choisirais un et l'utiliserais de manière cohérente au moins dans un projet. (En regardant mon propre projet actuel, je semble utiliser "make". J'espère que je suis cohérent ...)
Évitez de «construire» car il correspond mieux au modèle Builder et évitez de «produire» car il évoque le producteur / consommateur.
Pour vraiment continuer la métaphore du nom "Factory" du motif, je serais tenté par "manufacture", mais c'est un mot trop long.
la source
Je pense que cela découle de « créer un objet». Cependant, en anglais, le mot «créer» est associé à la notion de «faire naître, comme quelque chose d'unique qui n'évoluerait pas naturellement ou qui n'est pas fait par des processus ordinaires», et «d'évoluer à partir de sa propre pensée ou l’imagination, comme œuvre d’art ou invention. » Il semble donc que «créer» n'est pas le mot approprié à utiliser. «Faire», en revanche, signifie «faire exister en façonnant ou en changeant de matière, en combinant des pièces, etc.» Par exemple, vous ne créez pas de robe, vous fabriquez une robe (objet). Donc, à mon avis, «faire» en signifiant «produire; cause d'exister ou de se produire; provoquer »est un mot bien meilleur pour les méthodes d'usine.
la source
J'aime nouveau. Tome
lit mieux que
Traduit en anglais, nous avons foo est un nouveau foo ou foo est create foo. Bien que je ne sois pas un expert en grammaire, je suis presque sûr que ce dernier est grammaticalement incorrect.
la source
createFoo
est une fonction.foo
n'est pascreateFoo
, comme vous le dites.foo
est le résultat decreateFoo()
.En partie convention, en partie sémantique.
Les méthodes d'usine (signalées par le traditionnel
create
) doivent invoquer les constructeurs appropriés. Si je voyaisbuildURI
, je supposerais que cela impliquait un calcul ou un assemblage à partir de pièces (et je ne pense pas qu'il y ait une usine impliquée). La première chose à laquelle j'ai pensé en voyantgenerateURI
est de créer quelque chose de aléatoire, comme un nouveau lien de téléchargement personnalisé. Ce ne sont pas tous les mêmes, des mots différents évoquent des significations différentes; mais la plupart d'entre eux ne sont pas conventionnels.la source
Je l'appellerais
UriFactory.Create()
Où,
UriFactory
est le nom du type de classe qui fournit des méthodes qui créent desUri
instances.et la
Create()
méthode est surchargée pour autant de variations que vous avez dans vos spécifications.la source
Je ferais remarquer que j'ai vu tous les verbes mais produire en cours d'utilisation dans une bibliothèque ou une autre, donc je n'appellerais pas create être une convention universelle.
Maintenant, créer me sonne mieux, évoque le sens précis de l'action.
Alors oui, c'est une question de goût (littéraire).
la source
Personnellement, j'aime
instantiate
etinstantiateWith
, mais c'est juste à cause de mes expériences Unity et Objective C. Les conventions de dénomination à l'intérieur du moteur Unity semblent tourner autour du motinstantiate
pour créer une instance via une méthode de fabrique, et Objective C semble aimerwith
indiquer ce que sont les paramètres. Cela ne fonctionne vraiment bien que si la méthode est dans la classe qui va être instanciée (et dans les langages qui permettent la surcharge du constructeur, ce n'est pas vraiment une «chose»).Tout simplement le vieil objectif C
initWith
est aussi un bon!la source
La méthode d'usine ne dicte pas le nom de la méthode. Vous pouvez avoir autant de méthodes que vous le souhaitez dans votre usine, à condition qu'elles renvoient toutes l'objet de la même famille.
Pour plus de détails, visitez l'url http://xeon2k.wordpress.com
la source