Saya kira sebagian besar metode seperti pabrik dimulai dengan create
. Tapi mengapa mereka disebut " buat "? Mengapa tidak " membuat ", " menghasilkan ", " membangun ", " menghasilkan " atau yang lainnya? Apakah ini hanya masalah selera? Sebuah konvensi? Atau adakah arti khusus dalam "menciptakan"?
createURI(...)
makeURI(...)
produceURI(...)
buildURI(...)
generateURI(...)
Yang mana yang akan Anda pilih secara umum dan mengapa?
createXyz()
.create
awalan sebagai masalah konvensi demi konsistensi API dan juga karena hanya mengetikkan hurufc
akan menyebabkan semuanya muncul di lengkapi-otomatis IDE, yang akan membuatnya lebih mudah untuk seseorang yang mencoba mempelajari apa yang tersedia. Aku bisa punyaMatrix4f.identity()
,Matrix4f.transpose()
, dll tapi mereka akan lebih cepat untuk menemukanMatrix4f.createIdentity()
danMatrix4f.createTranspose(...)
, dllJawaban:
Beberapa pemikiran acak:
'Buat' lebih cocok dengan fitur daripada kebanyakan kata lain. Kata terbaik berikutnya yang dapat saya pikirkan dari atas kepala saya adalah 'Bangun'. Di masa lalu, 'Alloc' (mengalokasikan) mungkin telah digunakan dalam situasi yang sama, mencerminkan penekanan yang lebih besar pada blok data daripada objek dalam bahasa seperti C.
'Buat' adalah kata pendek dan sederhana yang memiliki makna intuitif yang jelas. Dalam kebanyakan kasus orang mungkin hanya memilihnya sebagai kata pertama, paling jelas yang muncul dalam pikiran ketika mereka ingin membuat sesuatu. Ini adalah konvensi penamaan yang umum, dan "penciptaan objek" adalah cara umum menggambarkan proses ... membuat objek.
'Membangun' dekat, tetapi biasanya digunakan untuk menggambarkan tahap tertentu dalam proses membuat objek (mengalokasikan / baru, membangun, menginisialisasi ...)
'Build' dan 'Make' adalah istilah umum untuk proses yang berkaitan dengan mengkompilasi kode, sehingga memiliki konotasi yang berbeda dengan programmer, menyiratkan proses yang terdiri dari banyak langkah dan mungkin banyak aktivitas disk. Namun, gagasan tentang sesuatu yang "membangun" Pabrik adalah ide yang masuk akal - terutama dalam kasus-kasus di mana struktur data yang kompleks dibangun, atau banyak informasi terpisah digabungkan dalam beberapa cara.
'Buat' kepada saya menyiratkan perhitungan yang digunakan untuk menghasilkan nilai dari input, seperti menghasilkan kode hash atau angka acak.
'Produce', 'Generate', 'Construct' lebih panjang untuk mengetik / membaca daripada 'Buat'. Secara historis programmer telah memilih nama pendek untuk mengurangi mengetik / membaca.
sumber
Joshua Bloch dalam "Java Efektif" menyarankan konvensi penamaan berikut
sumber
from
? Misal mengambil hipotesisId.of("abc")
vsId.from("xyz")
... atau akanfrom
menyarankan lebih banyak logika terjadi (mis. Penguraian input, pencarian / korelasi dari / dengan data lain, ...)? Sangat sulit untuk mencari "dari vs dari": DIngin menambahkan beberapa poin yang tidak saya lihat di jawaban lain.
Meskipun secara tradisional 'Pabrik' berarti 'menciptakan objek', saya suka memikirkannya secara lebih luas sebagai 'mengembalikan saya sebuah objek yang berperilaku seperti yang saya harapkan'. Saya seharusnya tidak selalu harus tahu apakah itu benda yang benar-benar baru , bahkan saya mungkin tidak peduli. Jadi, dalam kasus yang sesuai Anda mungkin menghindari nama 'Buat ...', bahkan jika itu yang Anda terapkan sekarang.
Guava adalah gudang ide penamaan pabrik yang bagus. Ini mempopulerkan gaya DSL yang bagus. contoh:
sumber
"Buat" dan "buat" pendek, cukup menggugah, dan tidak terikat dengan pola lain dalam penamaan yang bisa saya pikirkan. Saya juga melihat keduanya cukup sering dan mencurigai mereka mungkin "standar de facto". Saya akan memilih satu dan menggunakannya secara konsisten setidaknya dalam suatu proyek. (Melihat proyek saya sendiri saat ini, saya sepertinya menggunakan "make". Saya harap saya konsisten ...)
Hindari "membangun" karena lebih cocok dengan pola Builder dan menghindari "menghasilkan" karena membangkitkan Produser / Konsumen.
Untuk benar-benar melanjutkan metafora nama "Pabrik" untuk pola itu, saya akan tergoda oleh "manufaktur", tapi itu kata yang terlalu panjang.
sumber
Saya pikir itu berasal dari " membuat objek". Namun, dalam bahasa Inggris, kata "buat" dikaitkan dengan gagasan "menyebabkan timbul, sebagai sesuatu yang unik yang tidak akan berevolusi secara alami atau yang tidak dibuat oleh proses biasa," dan "berevolusi dari pikiran sendiri atau imajinasi, sebagai karya seni atau penemuan. " Jadi sepertinya "buat" bukan kata yang tepat untuk digunakan. "Membuat," di sisi lain, berarti "mewujudkan keberadaan dengan membentuk atau mengubah bahan, menggabungkan bagian-bagian, dll." Misalnya, Anda tidak membuat gaun, Anda membuat gaun (objek). Jadi, menurut saya, "membuat" dengan makna "menghasilkan; menyebabkan ada atau terjadi; mewujudkan ”adalah kata yang jauh lebih baik untuk metode pabrik.
sumber
Saya suka yang baru. Untuk saya
membaca lebih baik daripada
Diterjemahkan ke bahasa Inggris kami memiliki foo adalah foo baru atau foo adalah buat foo. Meskipun saya bukan ahli grammer, saya cukup yakin yang terakhir secara tata bahasa salah.
sumber
createFoo
adalah suatu fungsi.foo
tidakcreateFoo
, seperti yang Anda katakan.foo
adalah hasil daricreateFoo()
.Sebagian konvensi, sebagian semantik.
Metode pabrik (ditandai oleh tradisional
create
) harus memanggil konstruktor yang sesuai. Jika saya melihatbuildURI
, saya akan berasumsi bahwa itu melibatkan beberapa perhitungan, atau perakitan dari bagian-bagian (dan saya tidak akan berpikir ada pabrik yang terlibat). Hal pertama yang saya pikir ketika saya lihatgenerateURI
adalah membuat sesuatu yang acak, seperti tautan unduhan hasil personalisasi baru. Mereka tidak semuanya sama, kata-kata yang berbeda membangkitkan makna yang berbeda; tetapi kebanyakan dari mereka tidak konvensional.sumber
Saya akan menyebutnya
UriFactory.Create()
Dimana,
UriFactory
adalah nama dari tipe kelas yang menyediakan metode yang membuatUri
instance.dan
Create()
metode kelebihan beban sebanyak variasi yang Anda miliki dalam spesifikasi Anda.sumber
Saya menunjukkan bahwa saya telah melihat semua kata kerja tetapi menghasilkan digunakan di beberapa perpustakaan atau lainnya, jadi saya tidak akan menyebut membuat menjadi konvensi universal.
Sekarang, buat memang terdengar lebih baik bagi saya, membangkitkan makna tindakan yang tepat.
Jadi ya, ini adalah masalah selera (sastra).
sumber
Secara pribadi saya suka
instantiate
daninstantiateWith
, tapi itu hanya karena pengalaman Unity and Objective C saya. Konvensi penamaan di dalam mesin Unity tampaknya berputar di sekitar katainstantiate
untuk membuat contoh melalui metode pabrik, dan Objective C tampaknya menyukaiwith
menunjukkan apa parameternya. Ini hanya benar-benar berfungsi dengan baik jika metode ini ada di kelas yang akan dipakai secara instan (dan dalam bahasa yang memungkinkan overloading konstruktor, ini bukan 'hal').Justru Objective C's
initWith
yang lama juga bagus!sumber
Metode pabrik tidak menentukan nama metode. Anda dapat memiliki banyak metode yang Anda inginkan di pabrik Anda, asalkan semuanya mengembalikan objek dari keluarga yang sama.
Untuk detail lebih lanjut, kunjungi url http://xeon2k.wordpress.com
sumber