style for div attribute coding-style naming-conventions methods factory

coding-style - for - style title tooltip



¿Cómo nombrar a los métodos de fábrica? (11)

Supongo que la mayoría de los métodos tipo fábrica comienzan con create . Pero, ¿por qué se les llama " create "? ¿Por qué no " make ", " produce ", " build ", " generate " o algo más? ¿Es solo una cuestión de gusto? ¿Una convención? ¿O hay un significado especial en "crear"?

createURI(...) makeURI(...) produceURI(...) buildURI(...) generateURI(...)

¿Cuál escogerías en general y por qué?


"Crear" y "hacer" son breves, razonablemente evocadoras, y no están relacionadas con otros patrones al nombrar lo que se me ocurre. También he visto las dos 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 "hacer". Espero ser consistente ...)

Evite "construir" porque encaja mejor con el patrón de Constructor y evite "producir" porque evoca Productor / Consumidor.

Para continuar realmente la metáfora del nombre "Fábrica" ​​del patrón, me sentiría tentado por "fabricación", pero esa es una palabra demasiado larga.


Algunos pensamientos aleatorios:

  • ''Crear'' se ajusta mejor a la función que la mayoría de las otras palabras. La siguiente mejor palabra que puedo pensar en la parte superior de mi cabeza es ''Construir''. En el pasado, ''Alloc'' (allocate) podría haberse utilizado en situaciones similares, lo que refleja un mayor énfasis en los bloques de datos que los objetos en idiomas como C.

  • ''Crear'' es una palabra corta y simple que tiene un claro significado intuitivo. En la mayoría de los casos, las personas probablemente solo lo eligen como la primera palabra más obvia que se 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 ... creación de 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 una "construcción" de algo en la fábrica 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.

  • ''Produce'', ''Generate'', ''Construct'' son más largos para escribir / leer que ''Create''. Históricamente, los programadores han preferido los nombres cortos para reducir el tipeo / lectura.


Creo que proviene de " crear un objeto". Sin embargo, en inglés, la palabra "crear" está asociada con la noción "hacer que surja el ser, como algo único que no evolucionaría naturalmente o que no está hecho por procesos ordinarios", y "evolucionar a partir del propio pensamiento o imaginación, como una obra de arte o una invención. "Entonces parece que" crear " no es la palabra adecuada para usar. "Hacer", por otro lado, significa "dar vida formando o cambiando material, combinando partes, etc." Por ejemplo, si no creas un vestido, haces un vestido (objeto). Entonces, en mi opinión, "hacer" por significado "producir; causa de existir o suceder; traer "es una palabra mucho mejor para los métodos de fábrica.


El método de fábrica no dictamina el nombre del método. Puede tener tantos métodos como desee en su fábrica, siempre que devuelvan el objeto de la misma familia.

Para obtener más información, visite la URL http://xeon2k.wordpress.com


Me gusta nuevo. A mi

var foo = newFoo();

lee mejor que

var foo = createFoo();

Traducido al inglés tenemos foo es un nuevo foo o foo es crear foo. Si bien no soy un experto en gramática, estoy bastante seguro de que este último es gramaticalmente incorrecto.


Me gustaría señalar que he visto todos los verbos, pero que producen en uso en alguna biblioteca u otra, así que no llamaría a crear 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).


Parcialmente convencional, en parte semántica.

Los métodos de fábrica (señalados por la create tradicional) deben invocar a los constructores apropiados. Si viera buildURI , supondría que implicaba algún cálculo, o ensamblaje a partir de partes (y no creo que haya una fábrica involucrada). Lo primero que pensé cuando vi generateURI es hacer algo al azar, como un nuevo enlace de descarga personalizado. No son todos iguales, las diferentes palabras evocan significados diferentes; pero la mayoría de ellos no están convencionalizados.


Personalmente me gusta instantiate y instantiateWith , pero eso solo se debe a mis experiencias de Unidad y Objetivo C. Las convenciones de nomenclatura dentro del motor de Unity parecen girar en torno a la creación de instantiate palabras para crear una instancia a través de un método de fábrica, y el objetivo C parece coincidir with para indicar cuáles son los parámetros. Esto solo funciona bien si el método está en la clase que se va a crear una instancia (y en los lenguajes que permiten la sobrecarga del constructor, esto no es una ''cosa'').

¡Simplemente la vieja initWith Objective C también es buena!


Quería agregar un par de puntos que no veo en otras respuestas.

  1. Aunque tradicionalmente ''Factory'' significa ''crea objetos'', me gusta pensarlo más ampliamente ya que ''me devuelve un objeto que se comporta como esperaba''. No siempre debería saber si es un objeto completamente nuevo , de hecho podría no importarme. Por lo tanto, en casos adecuados, puede evitar el nombre ''Crear ...'', incluso si así es como lo está implementando en este momento.

  2. Guava es un buen repositorio de ideas de nombres de fábrica. Está popularizando un buen estilo de DSL. ejemplos:

    Lists.newArrayListWithCapacity(100); ImmutableList.of("Hello", "World");


Yo lo llamaría UriFactory.Create()

Dónde,

UriFactory es el nombre del tipo de clase que proporciona métodos que crean instancias de Uri .

y el método Create() está sobrecargado por tantas variaciones que tenga en sus especificaciones.

public static class UriFactory { //Default Creator public static UriType Create() { } //An overload for Create() public static UriType Create(someArgs) { } }


Joshua Bloch en "Effective Java" sugiere las siguientes convenciones de nomenclatura

valueOf - Devuelve una instancia que tiene, en términos generales, el mismo valor que sus parámetros. Tales fábricas estáticas son efectivamente métodos de conversión de tipo.

de - Una alternativa concisa a valueOf, popularizada por EnumSet (artículo 32).

getInstance : devuelve una instancia que los parámetros describen, pero no puede decirse que tenga el mismo valor. En el caso de un singleton, getInstance no toma parámetros y devuelve la única instancia.

newInstance : como getInstance, excepto que newInstance garantiza que cada instancia devuelta es distinta de todas las demás.

getType - Al igual que getInstance, pero se usa cuando el método de fábrica está en una clase diferente. Tipo indica el tipo de objeto devuelto por el método de fábrica.

newType : como newInstance, pero se usa cuando el método de fábrica está en una clase diferente. Tipo indica el tipo de objeto devuelto por el método de fábrica.