Supongo que la mayoría de los métodos de fábrica comienzan con create
. ¿Pero por qué se llaman " crear "? ¿Por qué no " hacer ", " producir ", " construir ", " generar " o algo más? ¿Es solo cuestión de gustos? ¿Una convención? ¿O hay un significado especial en "crear"?
createURI(...)
makeURI(...)
produceURI(...)
buildURI(...)
generateURI(...)
¿Cuál elegirías en general y por qué?
createXyz()
.create
prefijo como una convención en aras de la coherencia de la API y también porque al escribir la letrac
, todos aparecerían en el autocompletado del IDE, lo que facilitaría para alguien que intenta saber qué hay disponible. Podría haber tenidoMatrix4f.identity()
,Matrix4f.transpose()
, etc, pero que sería más rápido de encontrar comoMatrix4f.createIdentity()
eMatrix4f.createTranspose(...)
, etcRespuestas:
Algunos pensamientos al azar:
'Crear' se ajusta mejor a la función que la mayoría de las otras palabras. La siguiente mejor palabra que se me ocurre es "Construir". En el pasado, 'Alloc' (asignar) podría haberse utilizado en situaciones similares, lo que refleja el mayor énfasis en los bloques de datos que los objetos en lenguajes como C.
'Crear' es una palabra corta y simple que tiene un significado intuitivo claro. En la mayoría de los casos, las personas probablemente solo lo eligen como la primera palabra más obvia que les viene a la mente cuando desean crear algo. Es una convención de nomenclatura común, y la "creación de objetos" es una forma común de describir el proceso de ... crear objetos.
'Construir' está cerca, pero generalmente se usa para describir una etapa específica en el proceso de creación de un objeto (asignar / nuevo, construir, inicializar ...)
'Build' y 'Make' son términos comunes para los procesos relacionados con la compilación de código, por lo que tienen diferentes connotaciones para los programadores, lo que implica un proceso que comprende muchos pasos y posiblemente mucha actividad de disco. Sin embargo, la idea de que una Fábrica "construya" algo es una idea sensata, especialmente en los casos en que se construye una estructura de datos compleja, o se combinan muchas piezas de información por separado.
'Generar' para mí implica un cálculo que se utiliza para generar un valor a partir de una entrada, como generar un código hash o un número aleatorio.
'Producir', 'Generar', 'Construir' son más largos de escribir / leer que 'Crear'. Históricamente, los programadores han favorecido los nombres cortos para reducir la escritura / lectura.
fuente
Joshua Bloch en "Java efectivo" sugiere las siguientes convenciones de nomenclatura
fuente
from
? Por ejemplo, tomar un hipotéticoId.of("abc")
vsId.from("xyz")
... ofrom
sugeriría que ocurra más lógica (es decir, análisis de la entrada, búsqueda / correlación de / con otros datos, ...)? Es realmente difícil buscar "de vs de": DQuería agregar un par de puntos que no veo en otras respuestas.
Aunque tradicionalmente 'Fábrica' significa 'crea objetos', me gusta pensar en términos más generales como 'me devuelve un objeto que se comporta como espero'. No siempre debería saber si se trata de un objeto nuevo , de hecho, es posible que no me importe. Entonces, en casos adecuados, puede evitar el nombre 'Crear ...', incluso si así es como lo está implementando en este momento.
La guayaba es un buen depósito de ideas de nombres de fábrica. Se está popularizando un buen estilo DSL. ejemplos:
fuente
"Crear" y "crear" son cortos, razonablemente evocadores y no están vinculados a otros patrones de nombres que se me ocurran. También los he visto con bastante frecuencia y sospecho que pueden ser "estándares de facto". Elegiría uno y lo usaría consistentemente al menos dentro de un proyecto. (Mirando mi propio proyecto actual, parece que uso "make". Espero ser consistente ...)
Evite "compilar" porque encaja mejor con el patrón Builder y evite "producir" porque evoca Productor / Consumidor.
Para continuar realmente con la metáfora del nombre "Fábrica" para el patrón, me sentiría tentado por "fabricar", pero esa es una palabra demasiado larga.
fuente
Creo que se deriva de " crear un objeto". Sin embargo, en inglés, la palabra "crear" se asocia con la noción "hacer que surja, como algo único que no evolucionaría naturalmente o que no está hecho por procesos ordinarios", y "evolucionar desde el propio pensamiento o imaginación, como una obra de arte o una invención ". Parece que "crear" no es la palabra adecuada para usar. "Hacer", por otro lado, significa "traer a la existencia dando forma o cambiando material, combinando partes, etc." Por ejemplo, no se crea un vestido, se hace un vestido (objeto). Entonces, en mi opinión, "hacer" con el significado de "producir; hacer que exista o suceda; provocar "es una palabra mucho mejor para los métodos de fábrica.
fuente
Me gusta lo nuevo. A mi
lee mejor que
Traducido al inglés tenemos foo es un nuevo foo o foo es create foo. Si bien no soy un experto en gramática, estoy bastante seguro de que este último es gramaticalmente incorrecto.
fuente
createFoo
Es una función.foo
no lo escreateFoo
, como dices.foo
es el resultado decreateFoo()
.En parte convencional, en parte semántica.
Los métodos de fábrica (señalados por el tradicional
create
) deberían invocar a los constructores apropiados. Si lo vierabuildURI
, supondría que implicaba algún cálculo o ensamblaje a partir de piezas (y no pensaría que hubiera una fábrica involucrada). Lo primero que pensé cuando vigenerateURI
fue hacer algo al azar, como un nuevo enlace de descarga personalizado. No son todos iguales, palabras diferentes evocan significados diferentes; pero la mayoría de ellos no están convencionales.fuente
Yo lo llamaria
UriFactory.Create()
Dónde,
UriFactory
es el nombre del tipo de clase que proporciona métodos que creanUri
instancias.y el
Create()
método está sobrecargado para tantas variaciones como tenga en sus especificaciones.fuente
Señalaría que he visto todos los verbos pero produzco en uso en una biblioteca u otra, por lo que no llamaría a create como una convención universal.
Ahora, crear me suena mejor, evoca el significado preciso de la acción.
Entonces sí, es una cuestión de gusto (literario).
fuente
Personalmente me gusta
instantiate
yinstantiateWith
, pero eso es solo por mis experiencias con Unity y Objective C. Las convenciones de nomenclatura dentro del motor de Unity parecen girar en torno a la palabrainstantiate
para crear una instancia a través de un método de fábrica, y parece que al Objetivo C le gustawith
indicar cuáles son los parámetros. Sin embargo, esto solo funciona bien si el método está en la clase que se va a instanciar (y en los lenguajes que permiten la sobrecarga del constructor, esto no es tanto una 'cosa').¡Simplemente, el viejo Objetivo C
initWith
también es bueno!fuente
El método de fábrica no dicta el nombre del método. Puede tener tantos métodos como desee en su fábrica, siempre que todos devuelvan el objeto de la misma familia.
Para más detalles, visite la url http://xeon2k.wordpress.com
fuente