Nama metode untuk mendapatkan data [ditutup]

103

Peringatan: Ini bukanlah pertanyaan / diskusi yang terlalu serius yang saya posting ... tapi saya berani bertaruh bahwa sebagian besar pengembang telah merenungkan "masalah" ini ...

Selalu ingin mendapatkan pendapat lain tentang konvensi penamaan untuk metode yang pergi dan mendapatkan data dari suatu tempat dan mengembalikannya ...

Sebagian besar nama metode agak sederhana dan jelas ... SaveEmployee (), DeleteOrder (), UploadDocument (). Tentu saja dengan kelas Anda kemungkinan besar akan menggunakan bentuk singkat ... Simpan (), Hapus (), Unggah () masing-masing.

Namun, saya selalu kesulitan dengan tindakan awal ... bagaimana cara mendapatkan data. Tampaknya untuk setiap proyek saya akhirnya melompat di antara konvensi penamaan yang berbeda karena saya tidak pernah cukup senang dengan yang terakhir yang saya gunakan. Sejauh yang saya tahu ini adalah kemungkinan ->

  • GetBooks ()
  • FetchBooks ()
  • RetrieveBooks ()
  • FindBooks ()
  • LoadBooks ()

Apa yang kamu pikirkan

Jason
sumber

Jawaban:

126

Ini semua tentang semantik yang konsisten ;

Dalam judul pertanyaan Anda, Anda menggunakan mendapatkan data . Ini sangat umum dalam arti bahwa Anda perlu mendefinisikan apa artinya mendapatkan dengan cara yang secara signifikan tidak ambigu. Saya menawarkan contoh-contoh berikut untuk berharap menempatkan Anda di jalur yang benar ketika memikirkan tentang memberi nama.

  1. getBooks() adalah ketika Anda mendapatkan semua buku yang terkait dengan suatu objek, itu menyiratkan kriteria untuk set sudah ditentukan dan dari mana asalnya adalah detail tersembunyi.
  2. findBooks(criteria) adalah ketika mencoba menemukan sub-set buku berdasarkan parameter ke pemanggilan metode, ini biasanya akan dibebani dengan kriteria pencarian yang berbeda
  3. loadBooks(source) adalah saat Anda memuat dari sumber eksternal, seperti file atau db.
  4. Saya tidak akan menggunakan ambil / ambil karena terlalu kabur dan digabungkan dengan get dan tidak ada semantik yang tidak ambigu terkait dengan istilah tersebut.

Contoh: pengambilan menyiratkan bahwa beberapa entitas perlu pergi dan mendapatkan sesuatu yang jauh dan membawanya kembali. Anjing mengambil tongkat, dan mengambil adalah sinonim untuk mengambil dengan semantik tambahan yang mungkin Anda miliki sebelumnya juga. get adalah sinonim untuk mendapatkan juga yang menyiratkan bahwa Anda memiliki satu-satunya kepemilikan atas sesuatu dan tidak ada orang lain yang dapat memperolehnya secara bersamaan.

Semantik sangat penting:

cabang linguistik dan logika yang berkaitan dengan makna

Komentar tersebut adalah bukti bahwa istilah umum seperti get dan fetch tidak memiliki semantik khusus dan diinterpretasikan secara berbeda oleh orang yang berbeda. Pilih semantik untuk suatu istilah, dokumentasikan apa yang dimaksudkan untuk disiratkan jika semantik tidak jelas dan konsisten dengan penggunaannya.

Kata-kata dengan makna yang kabur atau ambigu diberikan semantik yang berbeda oleh orang yang berbeda karena prasangka dan prasangka mereka berdasarkan pendapat pribadi mereka dan itu tidak akan pernah berakhir dengan baik.

Komunitas
sumber
4
Saya akan menambahkan bahwa saya akan menggunakan ambil / ambil jika datanya akan diambil dari basis data
Liz Albin
1
Hmmm. Apakah Anda membedakan antara kriteria wildcard dan kriteria tertentu. Misalnya, apakah Anda akan menggunakan FindBooks (penerbit) saat mencari buku dari penerbit tertentu? Atau mungkin GetBooksFromPublisher (penerbit)?
Jason
5
publisher.getBooks () akan menjadi cara yang disukai untuk melakukannya, di mana penerbit adalah contoh khusus dari Penerbit. Library.getBooks (penerbit) tempat penerbit menerapkan antarmuka BookSearchCriteria. Sama dengan Library.getBooks (author) di mana penulis mengimplementasikan antarmuka BookSearchCriteria. Anda juga akan secara logis memiliki Library.getPublishers () sebagai metode pabrik
3
Terima kasih atas jawaban ini. Jelas menambahkan beberapa kejelasan. Intinya, Anda mengatakan bahwa metode pengambilan oleh filter tertentu harus tetap menggunakan objek. Dengan cara apa antarmuka digunakan? Misalnya, antarmuka BookSearchCriteria. Bisakah Anda memberikan beberapa kode contoh?
Jason
2
biasanya penamaan seperti fetchketika data waktu akses adalah rendah , yaitu pada perangkat yang sama, dari database lokal, dari memori. load, atau downloadjika waktu akses lebih tinggi , dari Internet, DB eksternal, dari file
János
13

Sejujurnya Anda harus memutuskan dengan tim Anda konvensi penamaan mana yang akan digunakan. Tetapi untuk bersenang-senang, mari kita lihat apa yang akan Anda pikirkan untuk memutuskan salah satu dari ini:

  • GetBooks ()

Metode ini milik sumber data, dan kami tidak peduli bagaimana cara mendapatkannya, kami hanya ingin mendapatkannya dari sumber data.

  • FetchBooks ()

Anda memperlakukan sumber data Anda seperti anjing pelacak, dan itu adalah tugasnya untuk mengambil buku Anda. Saya kira Anda harus memutuskan sendiri berapa banyak yang bisa dia muat di mulutnya sekaligus.

  • FindBooks ()

Sumber data Anda adalah pustakawan dan akan menggunakan sistem Desimal Dewey untuk menemukan buku Anda.

  • LoadBooks ()

Buku-buku ini termasuk dalam semacam "tas buku elektronik" dan harus dimasukkan ke dalamnya. Pastikan untuk memanggil ZipClosed () setelah memuat untuk mencegah kehilangannya.

  • RetrieveBooks ()

Saya tidak memiliki apa apa.

Nick Larsen
sumber
1
Jawaban yang diterima tidak membedakan dengan baik antara "get" dan "fetch" serta jawaban ini. Ambil menyiratkan itu harus dilakukan oleh orang lain karena akan memakan waktu atau membutuhkan keahlian untuk memenuhi, sedangkan get menyiratkan itu instan dan tersedia kata demi kata atau "dari rak".
Sridhar Sarnobat
Saya juga mengalami masalah dengan jawaban yang diterima hari ini. Untuk proyek saya (berbasis React / Redux), saya yakin penting untuk membedakan antara data yang ditarik dari toko Redux vs database aplikasi vs API pihak ketiga. Melakukan hal ini dengan benar pasti akan membantu keterbacaan di masa mendatang. Pengembang asli yang digunakan adduntuk menulis ke database dan menulis ke Store. Sekarang saya mencoba untuk memisahkan mereka, dan itu menyakitkan.
tim.rohrer
9

Jawabannya hanya berpegang pada apa yang membuat Anda nyaman dan konsisten.

Jika Anda memiliki situs web barnes and nobles dan Anda menggunakan GetBooks (), maka jika Anda memiliki item lain seperti entitas Film, gunakan GetMovies (). Jadi apa pun yang Anda dan tim Anda suka dan konsistenlah.

JonH
sumber
22
Setidaknya Anda konsisten dalam kesalahan ejaan yang konsisten. ;-)
Wim Hollebrandse
1
Sangat konsisten dengan ... :)
JonH
Tidak tersinggung sama sekali ... terima kasih telah menunjukkannya.
Jason
2

Dalam OO (C ++ / Java) saya cenderung menggunakan getSomething dan setSomething karena sangat sering, jika tidak selalu, saya mendapatkan atribut pribadi dari kelas yang mewakili objek data tersebut atau menyetelnya - pasangan pengambil / penyetel. Sebagai nilai tambah, Eclipse membuatnya untuk Anda.

Saya cenderung menggunakan Load hanya ketika maksud saya file - seperti dalam "memuat ke memori" dan itu biasanya berarti memuat ke primitif, struct (C) atau objek. Saya menggunakan kirim / terima untuk web.

Seperti yang dikatakan di atas, konsistensi adalah segalanya dan itu termasuk lintas pengembang.

Anthony Pegram
sumber
1

Tidak jelas apa yang Anda maksud dengan "mendapatkan data". Dari database? File? Penyimpanan?

Pandangan saya tentang penamaan metode adalah bahwa perannya adalah untuk menghilangkan ambiguitas dan idealnya kebutuhan untuk mencari dokumentasi. Saya percaya bahwa ini harus dilakukan bahkan dengan mengorbankan nama metode yang lebih panjang. Menurut penelitian, sebagian besar + pengembang menengah dapat membaca banyak kata dalam huruf unta. Dengan IDE dan pelengkapan otomatis, menulis nama metode yang panjang juga tidak menjadi masalah.

Jadi, ketika saya melihat "fetchBooks", kecuali jika konteksnya sangat jelas (misalnya, sebuah kelas bernama BookFetcherFromDatabase), itu ambigu. Ambil dari mana? Apa perbedaan antara Fetch and Find? Anda juga mempertaruhkan masalah bahwa beberapa pengembang akan mengaitkan semantik dengan kata kunci tertentu. Misalnya, ambil untuk database (atau memori) vs. memuat (dari file) atau unduh (dari web).

Saya lebih suka melihat sesuatu seperti "fetchBooksFromDatabase", "loadBookFromFile", "findBooksInCollection", dll. Ini kurang terlihat, tetapi setelah Anda melupakan panjangnya, itu jelas. Setiap orang yang membaca ini akan langsung mengerti apa yang Anda coba lakukan.

Uri
sumber
4
Masalah dengan fetchBooksFromDatabase adalah ketika Anda ingin memfaktorkan / menggeneralisasi dan fetchBooks maka mungkin ada beberapa penarikan data dari misalnya XML. Saya suka spesifik juga tetapi Anda kemudian menemukan diri Anda memisahkan fungsi yang sama di berbagai nama fungsi . Dan tuan itu tidak keren!
JonH
Saya pikir perbedaan antara Dapatkan versus Temukan cenderung jelas, tetapi saya bertanya-tanya tentang pertanyaan tentang Dapatkan versus Ambil. Sial..apakah ada bedanya?
Jason
@ JonH: Saya setuju dengan Anda tentang itu. Namun, jika Anda mengetahui sebelumnya bahwa Anda akan memiliki jenis pengambilan yang berbeda, Anda akan mengkodekannya dalam penamaan kelas (sehingga Anda dapat menafsirkan arti dari konteks, misalnya, DatabaseConnector vs. XmlConnector).
Uri
7
@Jason: Karena "getter" ada di mana-mana (dan merupakan bagian dari framework seperti JavaBeans), banyak pemrogram cenderung menganggapnya sebagai cara yang hampir transparan untuk mengakses bidang data. "Fetch", di sisi lain, menunjukkan kepada beberapa programmer akses yang lebih panjang yang melibatkan transfer data dari satu tempat ke tempat lain (a-la CPU fetching) atau database fetching. Misalnya, bahasa kueri Hibernate memiliki konstruksi Ambil. Pengembang sering menggunakan metode berdasarkan ekspektasi mereka terhadap nama tersebut daripada membaca dokumentasi, jadi menghindari pengiriman sinyal yang salah sangat penting.
Uri