Veri almak için yöntem adları [kapalı]


104

Uyarı: Bu, yayınladığım çok ciddi bir soru / tartışma değil ... ancak çoğu geliştiricinin bu "sorunu" düşündüğüne bahse girmeye hazırım ...

Her zaman bir yerden veri alan ve geri döndüren yöntemler için adlandırma kuralları ile ilgili başka görüşler almak istedim ...

Çoğu yöntem adı biraz basit ve açıktır ... SaveEmployee (), DeleteOrder (), UploadDocument (). Tabii ki sınıflarda büyük olasılıkla kısa biçimi kullanırsınız ... Sırasıyla Kaydet (), Sil (), Yükle ().

Ancak, her zaman ilk eylemle uğraştım ... verileri nasıl elde edeceğim. Görünüşe göre her proje için farklı adlandırma kuralları arasında gidip geliyorum çünkü son kullandığımdan asla pek memnun değilim. Söyleyebileceğim kadarıyla olasılıklar bunlar ->

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

Senin düşüncen ne

Yanıtlar:


127

Her şey tutarlı anlambilimle ilgili ;

Soru başlığınızda veri almayı kullanırsınız . Bu, anlamsal olarak önemli ölçüde belirsiz olmayan bir şekilde almanın ne anlama geldiğini tanımlamanız gereken bir anlamda son derece geneldir . Bir şeyleri adlandırmayı düşünürken sizi doğru yola sokmak için aşağıdaki örnekleri sunuyorum.

  1. getBooks() bir nesneyle ilişkili tüm kitapları aldığınızda, set için kriterlerin zaten tanımlanmış olduğu ve nereden geldiklerinin gizli bir ayrıntı olduğu anlamına gelir.
  2. findBooks(criteria) yöntem çağrısının parametrelerine dayalı olarak kitapların bir alt kümesini bulmaya çalışırken, bu genellikle farklı arama kriterleriyle aşırı yüklenecektir.
  3. loadBooks(source) dosya veya veri tabanı gibi harici bir kaynaktan yükleme yaptığınız zamandır.
  4. Onlar çok belirsiz ve conflated olsun çünkü almak / getirme kullanmak olmaz olsun ve şartları ile ilgili herhangi bir kesin semantik yoktur.

Örnek: fetch , bazı varlıkların uzaktaki bir şeyi alıp geri getirmesi gerektiğini ifade eder. Köpekler bir sopa alıp, ve almak için eşanlamlıdır getir öncesinde de bir şey ilave anlamsal olmuş olabilir o bulundurmakla. get aynı zamanda elde etmenin eşanlamlısıdır, bu da bir şeye yalnızca sahip olduğunuzu ve başka hiç kimsenin aynı anda elde edemeyeceğini gösterir.

Anlambilim son derece önemlidir:

anlamla ilgili dilbilim ve mantık dalı

Comments gibi jenerik terimler kanıtlıyor olsun ve getirme semantik hiçbir özgü olması ve farklı kişiler tarafından farklı yorumlanır. Bir terim için bir semantik seçin, anlambilim net değilse ve kullanımıyla tutarlıysa neyi ifade etmesi amaçlandığını belgeleyin.

Belirsiz veya belirsiz anlamlara sahip kelimelere, kişisel görüşlerine dayanan önyargıları ve önyargıları nedeniyle farklı kişiler tarafından farklı anlamlar verilir ve bu asla iyi bitmez.


5
Veriler bir veri tabanından alınacak olsaydı getir / al kullanacağımı eklerdim
Liz Albin

1
Hmmm. Joker kriterleri ve belirli kriterleri ayırt eder misiniz? Örneğin, belirli bir yayıncıdan kitap ararken FindBooks'u (yayıncı) kullanır mısınız? Veya belki GetBooksFromPublisher (yayıncı)?
Jason

6
Publisher.getBooks () bunu yapmanın tercih edilen yoludur, burada yayıncı bir Publisher'ın belirli bir örneğidir. Yayıncının BookSearchCriteria arabirimini uyguladığı Library.getBooks (yayıncı). Yazarın bir BookSearchCriteria arabirimi uyguladığı Library.getBooks (yazar) ile aynı. Ayrıca bir fabrika yöntemi olarak mantıksal olarak

3
Bu cevap için teşekkür ederim. Kesinlikle biraz netlik katıyor. Temelde, belirli bir filtre tarafından geri getirme yöntemlerinin nesnede kalması gerektiğini söylüyorsunuz. Arayüz ne şekilde kullanılacak? Örneğin, BookSearchCriteria arabirimi. Biraz örnek kod verebilir misiniz?
Jason

2
genellikle adlandırma, fetchveri erişim süresinin düşük olduğu zaman gibidir , yani aynı cihazda, yerel veritabanından, bellekten. loadVeya downloaderişim süresi ise daha yüksek dosyadan, internet, dış DB'den,
János

13

Dürüst olmak gerekirse, hangi adlandırma kuralını kullanacağınıza ekibinizle birlikte karar vermelisiniz. Ama eğlenmek için, bunlardan herhangi birine karar vermek için ne düşündüğünüzü görelim:

  • GetBooks ()

Bu yöntem bir veri kaynağına aittir ve onları nasıl elde ettiği umurumuzda değil, sadece onları veri kaynağından almak istiyoruz.

  • FetchBooks ()

Veri kaynağınıza bir tazı gibi davranıyorsunuz ve kitaplarınızı getirmek onun görevi. Sanırım ağzına kaç tane sığdırabileceğine kendi başına karar vermelisin.

  • FindBooks ()

Veri kaynağınız bir kütüphanecidir ve kitaplarınızı bulmak için Dewey Decimal sistemini kullanacaktır.

  • LoadBooks ()

Bu kitaplar bir tür "elektronik kitap çantasına" aittir ve içine yüklenmeleri gerekir. Kaybetmelerini önlemek için yükledikten sonra ZipClosed () 'i çağırdığınızdan emin olun.

  • RetrieveBooks ()

Hiçbir şeyim yok.


2
Kabul edilen yanıt, bu yanıt kadar "al" ve "getir" arasında da iyi bir ayrım yapmadı. Getirme, bunun bir başkası tarafından yapılması gerektiğini, çünkü biraz zaman alacağını veya yerine getirilmesi biraz uzmanlık gerektireceğini ima eder, oysa get anlık ve sözlü veya "kullanıma hazır" olduğunu ima eder.
Sridhar Sarnobat

Ben de bugün kabul edilen cevap konusunda sorun yaşıyorum. Projem için (React / Redux tabanlı) Redux mağazasından çekilen veriler ile uygulamanın veritabanı ile üçüncü taraf API arasındaki farkı ayırt etmenin önemli olduğuna inanıyorum. Bunu doğru yapmak, gelecekte okunabilirliğe kesinlikle yardımcı olacaktır. Kullanılan orijinal geliştirici add, hem bir veritabanına yazar hem de Mağazaya yazar. Şimdi onları ayırmaya çalışıyorum ve bu bir acı.
tim.rohrer

9

Cevap, rahat olduğunuz şeye bağlı kalmak ve tutarlı olmaktır.

Bir barnes and nobles web siteniz varsa ve GetBooks () kullanıyorsanız, Movie varlığı gibi başka bir öğeniz varsa GetMovies () kullanın. Yani siz ve ekibiniz neyi seviyor ve tutarlı olun.


22
En azından tutarlı yazım hatalarında tutarlısın. ;-)
Wim Hollebrandse

1
Çok tutarlı tutarlıdır ... :)
Jonh

Hiç gücenmedim ... işaret ettiğin için teşekkürler.
Jason

2

OO'da (C ++ / Java) getSomething ve setSomething kullanma eğilimindeyim, çünkü her zaman olmasa da çoğu zaman ya sınıftan o veri nesnesini temsil eden ya da onu ayarlayan - alıcı / ayarlayıcı çifti özel bir öznitelik alıyorum. Bir artı olarak, Eclipse bunları sizin için üretir.

Yüklemeyi yalnızca dosyaları kastettiğimde kullanmaya meyilliyim - "belleğe yükle" gibi ve bu genellikle ilkellere, yapılara (C) veya nesnelere yüklemeyi ima eder. Web için gönder / al kullanıyorum.

Yukarıda belirtildiği gibi, tutarlılık her şeydir ve buna çapraz geliştiriciler dahildir.


1

"Verileri elde etmek" için ne demek istediğin net değil. Veritabanından mı? Bir dosya? Hafıza?

Yöntem adlandırma hakkındaki görüşüm, rolünün herhangi bir belirsizliği ortadan kaldırmak ve ideal olarak belgelere bakma ihtiyacını karşılamaktır. Daha uzun yöntem isimleri pahasına bile bunun yapılması gerektiğine inanıyorum. Araştırmalara göre, çoğu orta seviye + geliştirici deve durumunda birden çok kelimeyi okuyabiliyor. IDE ve otomatik tamamlamalarla, uzun yöntem adları yazmak da sorun değildir.

Bu nedenle, bağlam çok net olmadığı sürece (örneğin, BookFetcherFromDatabase adlı bir sınıf) "fetchBooks" gördüğümde belirsizdir. Nereden getireceksin? Bul ve bul arasındaki fark nedir? Ayrıca, bazı geliştiricilerin anlambilimini belirli anahtar kelimelerle ilişkilendirmesi sorununu da riske atıyorsunuz. Örneğin, veritabanı için getirme (veya bellek) ile yükleme (dosyadan) veya indirme (web'den).

"FetchBooksFromDatabase", "loadBookFromFile", "findBooksInCollection", vb. Gibi bir şey görmeyi tercih ederim. Daha az göze çarpıyor, ancak uzunluğu bir kez aştığınızda, anlaşılır. Bunu okuyan herkes, yapmaya çalıştığınız şeyi hemen anlayacaktır.


4
FetchBooksFromDatabase ile ilgili sorun, Kitapları çarpanlarına ayırmak / genellemek ve fetchBooks'u söz konusu XML'den bir miktar veri çekebilmenizdir. Ayrıntıları da seviyorum ama o zaman kendinizi aynı işlevselliği farklı işlev adlarına ayırırken buluyorsunuz . Ve bu efendim hiç hoş değil!
JonH

Bence Get ile Bul arasındaki fark açık olma eğilimindedir, ancak Get ve Getir ile ilgili soruyu merak ediyorum. Cehennem..bir fark var mı?
Jason

@JonH: Bu konuda sana katılıyorum. Ancak, önceden farklı getirme türlerine sahip olacağınızı bilseydiniz, bunu sınıf isimlendirmesinde kodlamanız gerekirdi (böylece anlamı bağlamdan yorumlayabilirsiniz, örneğin, DatabaseConnector ve XmlConnector).
Uri

7
@Jason: "Alıcılar" çok yaygın olduğundan (ve JavaBeans gibi çerçevelerin parçası olduğundan), birçok programcı bunları bir veri alanına erişmenin neredeyse şeffaf bir yolu olarak görme eğilimindedir. Diğer yandan "Getirme", bazı programcılara verilerin bir yerden bir yere aktarılmasını (a-la CPU getirme) veya veritabanı getirmeyi içeren daha uzun bir erişimi belirtir. Örneğin, Hibernate'in sorgu dili bir Getirme yapısına sahiptir. Geliştiriciler genellikle belgeleri okumak yerine adla ilgili beklentilerine dayalı yöntemler kullanırlar, bu nedenle yanlış sinyal göndermekten kaçınmak çok önemlidir.
Uri
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.