naming conventions - ropa - ¿Cuál es un buen nombre para un método que obtiene o crea un objeto?
que nombre le puedo poner a mi marca de ropa (17)
¿Qué hay de Getsert
? de get
o insert
, ya que la update
o insert
es Upsert
Aunque no he visto ningún framework popular, use este término, pero esto se ajusta a la idea que @Jason Williams señaló, que:
- debe quedar claro para el usuario que no solo haría una obtención normal
- No tiene que ir a la documentación para ver qué hace
- Fácil de recoger e intuitivo? (No estoy seguro)
Supongamos que tiene un caché y un método que hará algo como lo siguiente:
if (wanted Foo is not in cache)
cache.Add(new Foo())
Return Foo from cache
¿Cómo llamarías ese método? GetFoo()
, GetOrCreateFoo()
o algo más (y mejor)? ¿O debería dividirse realmente en dos métodos?
6 años tarde para la fiesta, pero sugiero una forma abreviada de "determinar": det
, como en detFoo()
.
- Es corto
- Asociado al instante con get / set
- Ambiguo con respecto a si realiza cambios o no (ya que el método subyacente es ambiguo con respecto a los cambios, debe tener una convención de nomenclatura para reflejar eso)
Depende del tipo de objeto que tenga sentido para el usuario.
Si la creación no es importante para el usuario, es GetFoo; de lo contrario, llámalo createOrGetFoo.
Si se necesita la diferenciación de conceptos, puede tener métodos como GetFoo, CreateFoo y createOrGetFoo.
Prefiero ponerlo como GetFoo de acuerdo con su información dada.
En la mayoría de los casos, un simple GetFoo es suficiente ya que la persona que llama no necesita saber que lo está creando y almacenando en caché. De eso se trata la encapsulación.
Sin embargo, en algunas circunstancias, crear es una operación costosa, por lo que es útil saber que puede estar creando algo bajo demanda y en algunos casos será lento. En este caso, una convención de nomenclatura diferente lo hace más claro para la persona que llama. En este caso, GetOrCreate () o Get (Options.CreateIfMissing) es una buena pista para la persona que llama.
(Por supuesto, el comportamiento debe anotarse en la documentación, pero es bueno usar un nombre de método que recuerde a las personas los efectos secundarios mientras leen el código, sin que tengan que abrir y leer la documentación para cada método que se llame)
El tipo de caso en el que creo que ocurre esto más a menudo (por ejemplo) al encontrar un nodo de árbol (por ejemplo, en un documento Xml) es posible que tenga "CreateNode" (para crear un nodo sin agregarlo al árbol) y "AddNode" (para agregar un nodo existente al árbol). En este caso, un "Agregar un nodo si no existe ya" debe tener un nombre descriptivo diferente, así que usaré algo como "EnsureNodeExists" para diferenciarlo y aclarar el propósito.
Las palabras obtain
y acquire
parecen estar bien adaptadas. obtain
especialmente:
para tomar posesión de; obtener, adquirir o procurar, como a través de un esfuerzo o mediante una solicitud: para obtener permiso; para obtener un mejor ingreso.
Se podría decir que en su caso la persona que llama del método obtiene el foo.
Mi preferencia es GetFoo (), ya que la acción desde el punto de vista de la persona que llama está obteniendo y la caché es más un detalle de implementación.
Otra opción que tiene sentido si tiene una referencia referencial o el objeto es un singleton.
A veces, una llamada getOrCreate()
es realmente una inicialización getOrCreate()
. Por lo tanto, desea crear un objeto y si ya se creó, devolver una referencia al mismo. En este caso, llamaría al método lazyGet
que también se usa en otras bibliotecas, como el perezoso de javaslang .
MyObject lazyGet() {
}
Esto tiene un beneficio en el sitio de llamadas. Si su llamada es costosa en el contexto de la creación, su destinatario sabrá entonces que la inicialización ansiosa se puede usar para mover el costo de la llamada a una sección no crítica de su programa.
PD: Esto también se usa para la memorización, que es una técnica de optimización en la que se devuelven objetos en caché de estructuras de datos inmutables.
Para un caché, simplemente lo llamaría GetFoo (). Una memoria caché está diseñada para actuar como una fachada detrás de una fuente de datos, de modo que las personas que llaman puedan acceder fácilmente a los elementos sin preocuparse de cómo se cargan o no.
Lo llamaría GetFoo, pero documentaría que si el objeto solicitado no está en el caché, que el caché lo cargará (y todas las posibles implicaciones de rendimiento que pueda tener).
Sé que ese tema tiene 6 años. Pero ... creo que el mejor nombre es
getInstanceFoo()
o
getFooInstance()
como en la clase singleton.
Sé que llegué muy tarde a la pregunta, pero ¿puedo proponer GrabFoo()
como una convención para obtener o crear si falta para diferenciarlo de GetFoo()
?
Mirando los sinónimos de Get
, veo varios verbos adecuados, algunos ya comúnmente usados como verbos de método. Por ejemplo, Fetch
ya conlleva la Fetch
algo de un sistema externo. (por ejemplo, base de datos o red)
Grab parece raramente utilizado, y podría llevar una semántica (aunque débil) de I want you to get-or-create it, no matter what.
Si este diseño tiene sentido lógico en su aplicación, entonces creo que GetOrCreateFoo
es un nombre apropiado.
Otro enfoque que transmita claramente su propósito sería
GetFoo(bool createIfNotExists)
Por supuesto, si realmente estamos hablando de caché, el lado de implementación podría no importar si el ítem se acaba de crear. Lo anterior se aplica en los casos en que la persona que llama realmente necesita saber sobre la posible creación de Foo
y sus implicaciones (como cuando se recupera del sistema de archivos o de la base de datos, tal vez?)
Solo GetFoo()
como la mayoría de la gente ha mencionado aquí.
La razón es - El método es responsable de devolver la instancia del objeto. Esa es su principal responsabilidad. Si el objeto no se crea, cree el objeto y colóquelo en la memoria caché. las personas que llaman desde el exterior no necesitan molestarse con el método interno para devolver el objeto; las personas que llamen simplemente llamarán a GetFoo () cuando sea necesario. El método GetFoo () encapsula y oculta la complejidad detrás de la creación y el almacenamiento en caché del objeto. por GetFoo()
tanto GetFoo()
Suponiendo que este método está en cacheManager, entonces fetch (wanted) [or get (wanted) según su prefijo personal] es suficiente, con el doc API que indica que el elemento se crea si no existe.
Wanted debe escribirse en consecuencia, por lo que no hay necesidad de Foo en el nombre del método.
Uso Take
lugar de Get
. Razones por las cuales:
-
take
también suena un poco comomake
-
take
tiene el mismo significado queget
en el contexto dado -
take
sonidos con más fuerza queget
, así que si no puedoget
, lo tomaré
Yo lo llamaría GetFoo
, con el argumento de que a la persona que llama no le importa si se le dará un Foo
nuevo o uno ya creado; solo quiere Get
un Foo
.
Yo también lo llamaría "getFoo ()" y añadiré a sus comentarios lo que hace la función si no existe un Foo.
Engendrar
Un par de definiciones que parecen encajar:
- Hacer que exista o que ocurra; Produce
- Para causar o crear
La palabra también se divide en las dos ideas de tu pregunta.
"¿Cuál es un buen nombre para un método que obtiene o crea un objeto?"
Be = crea
Get = consigue
Además, es realmente corto.
Otra alternativa es Resolver .
Tomo prestada esa palabra de Autofac, que usa métodos Resolve para obtener una instancia de un objeto o crearlo si es necesario.