Eu acho que a maioria dos métodos de fábrica começa com create
. Mas por que eles são chamados de " criar "? Por que não " fazer ", " produzir ", " construir ", " gerar " ou algo mais? É apenas uma questão de gosto? Uma convenção? Ou existe um significado especial em "criar"?
createURI(...)
makeURI(...)
produceURI(...)
buildURI(...)
generateURI(...)
Qual você escolheria em geral e por quê?
createXyz()
.create
prefixo por uma questão de convenção por questões de consistência da API e também porque apenas digitar a letrac
faria com que todos aparecessem no preenchimento automático do IDE, o que tornaria mais fácil para alguém tentando aprender o que está disponível. Eu poderia ter tidoMatrix4f.identity()
,Matrix4f.transpose()
etc., mas eles estariam mais rápida de encontrar comoMatrix4f.createIdentity()
eMatrix4f.createTranspose(...)
, etc.Respostas:
Alguns pensamentos aleatórios:
'Criar' se encaixa melhor no recurso do que na maioria das outras palavras. A próxima melhor palavra em que consigo pensar é 'Construir'. No passado, 'Alloc' (alocar) poderia ter sido usado em situações semelhantes, refletindo a maior ênfase em blocos de dados do que objetos em linguagens como C.
'Criar' é uma palavra curta e simples que tem um significado intuitivo claro. Na maioria dos casos, as pessoas provavelmente a escolhem como a primeira palavra mais óbvia que vem à mente quando desejam criar algo. É uma convenção de nomenclatura comum e "criação de objetos" é uma maneira comum de descrever o processo de ... criação de objetos.
'Construir' está próximo, mas geralmente é usado para descrever um estágio específico no processo de criação de um objeto (alocar / novo, construir, inicializar ...)
'Build' e 'Make' são termos comuns para processos relacionados à compilação de código, portanto, possuem conotações diferentes para programadores, implicando um processo que compreende muitas etapas e possivelmente muita atividade do disco. No entanto, a idéia de uma fábrica "construindo" alguma coisa é uma idéia sensata - especialmente nos casos em que uma estrutura de dados complexa é construída, ou muitas informações separadas são combinadas de alguma maneira.
'Gerar' para mim implica um cálculo que é usado para produzir um valor a partir de uma entrada, como gerar um código hash ou um número aleatório.
'Produzir', 'Gerar', 'Construir' são mais longos para digitar / ler do que 'Criar'. Historicamente, os programadores preferem nomes curtos para reduzir a digitação / leitura.
fonte
Joshua Bloch em "Java eficaz" sugere as seguintes convenções de nomenclatura
fonte
from
? Por exemplo, fazer umId.of("abc")
vs hipotéticoId.from("xyz")
… oufrom
sugeriria mais lógica acontecendo (ou seja, análise da entrada, pesquisa / correlação de / com outros dados,…)? É realmente difícil procurar "de vs de": DQueria adicionar alguns pontos que não vejo em outras respostas.
Embora tradicionalmente "Fábrica" signifique "crie objetos", gosto de pensar mais amplamente como "retorna para mim um objeto que se comporta como eu esperava". Eu nem sempre deveria saber se é um objeto novo , na verdade eu posso não me importar. Portanto, em casos adequados, você pode evitar um nome 'Criar ...', mesmo que seja assim que você o está implementando agora.
A goiaba é um bom repositório de idéias de nomes de fábrica. Está popularizando um bom estilo DSL. exemplos:
fonte
"Criar" e "criar" são curtos, razoavelmente evocativos e não estão vinculados a outros padrões de nomes em que consigo pensar. Eu também já vi isso com bastante frequência e suspeito que possam ser "padrões de fato". Eu escolheria um e o usaria consistentemente pelo menos dentro de um projeto. (Olhando para o meu próprio projeto atual, pareço usar "make". Espero ser consistente ...)
Evite "construir" porque ele se encaixa melhor com o padrão do Construtor e evite "produzir" porque evoca Produtor / Consumidor.
Para realmente continuar a metáfora do nome "Factory" para o padrão, eu ficaria tentado pelo "fabric", mas é uma palavra muito longa.
fonte
Eu acho que deriva de " criar um objeto". No entanto, em inglês, a palavra “criar” está associada à noção de “fazer surgir, como algo único que não evoluiria naturalmente ou que não é produzido por processos comuns” e “evoluir a partir do próprio pensamento ou imaginação, como obra de arte ou invenção. " Portanto, parece que "criar" não é a palavra correta a ser usada. “Criar”, por outro lado, significa “tornar realidade moldando ou trocando materiais, combinando peças etc.” Por exemplo, você não cria um vestido, faz um vestido (objeto). Então, na minha opinião, "faça", significando "produzir; fazer existir ou acontecer; criar ”é uma palavra muito melhor para métodos de fábrica.
fonte
Eu gosto de novo Para mim
lê melhor que
Traduzido para o inglês, temos foo é um novo foo ou foo é create foo. Embora não seja especialista em gramática, tenho certeza de que o último é gramaticalmente incorreto.
fonte
createFoo
é uma função.foo
não écreateFoo
, como você diz.foo
é um resultado decreateFoo()
.Parcialmente convenção, parcialmente semântica.
Os métodos de fábrica (sinalizados pelo tradicional
create
) devem chamar os construtores apropriados. Se eu vissebuildURI
, eu assumiria que isso envolvia algum cálculo ou montagem de peças (e eu não pensaria que havia uma fábrica envolvida). A primeira coisa que pensei quando vigenerateURI
foi criar algo aleatório, como um novo link de download personalizado. Eles não são todos iguais, palavras diferentes evocam significados diferentes; mas a maioria deles não é convencionalizada.fonte
Eu chamaria isso
UriFactory.Create()
Onde,
UriFactory
é o nome do tipo de classe que fornece métodos que criamUri
instâncias.e o
Create()
método está sobrecarregado para tantas variações nas suas especificações.fonte
Eu apontaria que vi todos os verbos, mas que são produzidos em uso em alguma biblioteca ou outra, então não chamaria de criar uma convenção universal.
Agora, criar soa melhor para mim, evoca o significado preciso da ação.
Então, sim, é uma questão de gosto (literário).
fonte
Pessoalmente, eu gosto
instantiate
einstantiateWith
, mas isso é apenas por causa das minhas experiências de Unidade e Objetivo C. As convenções de nomenclatura no mecanismo do Unity parecem girar em torno da palavrainstantiate
para criar uma instância por meio de um método de fábrica, e o Objetivo C parece gostarwith
de indicar quais são os parâmetros. Isso realmente funciona bem se o método estiver na classe que será instanciada (e em linguagens que permitem sobrecarga de construtores, isso não é uma coisa '').Simplesmente velhos Objective C's
initWith
também são uma boa opção!fonte
O método de fábrica não determina o nome do método. Você pode ter quantos métodos desejar em sua fábrica, desde que todos retornem o objeto da mesma família.
Para mais detalhes, visite o URL http://xeon2k.wordpress.com
fonte