Saklı yordam Adlandırma kuralları? [kapalı]


11

Üst düzey geliştiricilerimizden biri, "verbObject" türünde bir adlandırma ("GetMemberByID") yerine "objectVerb" adlandırma tarzı ("MemberGetById") gibi saklı yordamlar için bir adlandırma kuralı kullanmamız gerektiğini belirtti. Bu standardın nedeni, ilgili tüm saklı yordamların eylem yerine nesneye göre gruplandırılmasıdır.

Bir şeyleri isimlendirmenin mantığını görürken, ilk kez bu şekilde adlandırılmış saklı yordamlar gördüm. Adlandırma kuralına ilişkin düşüncem, adın doğal olarak okunamaması ve kelimelerin ne söylediğini ve prosedürün ne yapabileceğini belirlemek için biraz zaman alıyor.

Bu konuda ne düşünüyorsunuz? Saklanan bir proc adını adlandırmanın daha yaygın yolu nedir ve ne tür saklı proc adlandırma kuralları kullandınız veya uyguladınız?


1
"adı doğal olarak okunamıyor"? Kim tarafından? İlk doğal diliniz nedir? İngilizce? Veya başka bir şey?
S.Lott

9
@ S.Lott - benim için Degobah'daki bataklıkta duyacağın bir şey gibi görünüyor.
TZHX

1
Harika bir soru! Bazı standartlara sahip olmak, standartlara sahip olmaktan daha iyidir, ancak bazı yetenekli insanlar bu kavramı daha da ileri götürdü ve iyi bir standart geliştirdiler. Örneğin, Dijkstra'nın bir 0 ilk unsur olarak yerine 1. index diziler için çok daha mantıklı neden yazmıştır developeronline.blogspot.com/2008/04/... Öyle görünüşte önemsiz bir konu, ama sanki bahis onunla gelmesi biraz zaman aldı. Benzer şekilde, Spolsky'nin güzel bir sistemi var: joelonsoftware.com/articles/Wrong.html Bazı düşünmek açıkça acıyı önler
Job

4
Saklı yordamlar tamamen kurtulmak söyleyebilirim;)
Michael Brown

Yanıtlar:


10

Şuna böyle bak. Yöntemleriniz kodda nasıl düzenlenmiştir? Nesne ile, yöntemler asılı.

MyObject.GetById(int)
MyObject.Save()

Depolanmış süreçlerinizin bu adlandırma işlemlerini taklit etmeleri, kaynak kodunuzla ilişkilerini görmek çok daha kolay olacaktır.

MyObjectGetById
MyObjectSave

İyi bir nokta, ama SQL doğası gereği OO değildir. Aslında, Java / C # / etc'den çok farklıdır. onunla arayüz oluşturan kod. SQL'in işini yapmasına izin vermek ve Java'nın işini yapmasına izin vermek doğaldır. Kodun oluşturulması gerekiyorsa, az çaba ile gerçekleştirilebilir.
İş

4
OO'nun burada bir düşünce olduğunu düşünmüyorum. Yukarıdaki, böyle bir adlandırma kuralını ilk kez göründüğü kadar doğal olmayan bir örnek.
Mark Freedman

2
Kodda bir yöntem olması "MyObject.GetById (int)" olması durumunda, saklanan bir proc neden "MyObject.GetById" olarak adlandırılamaz? Gruplama yine de gerçekleşir ve bir nokta, nesne / tablo ile istenen eylem arasında bir ayrım yapar.
Chris

1
@Chris, bir 'kullanabileceğinden emin değilim.' ama kesinlikle objectVerb gruplarını bir şey hakkında düşündükleri gibi kullanmak. Önce başlamayı düşünmüyorum, ne istediğimi düşünüyorum, sonra nasıl geri getireceğim.
CaffGeek

1
@ Mark Freedman, mutlaka OO olduğu için değil, prosedürel dillerdeki şeyleri aynı şekilde gruplandırıyorsunuz, sadece gerçek nesnelerde değiller. Ancak genellikle kod dönüştürüldüğünde doğal olarak bir nesne haline gelene göre ön ek getirilir. strCompare, strLen, etc, objectAction
CaffGeek

6

Ben de mantığı görebiliyorum; eylemleri kuruluşa göre gruplandırır. Ancak, eylemleriniz her zaman GET, PUT ve DELETE ise, adlandırmadaki değişiklik o kadar önemli olmayabilir. "AccountTransferMoney" gibi benzersiz işlem adlarınız olduğunda oluşan yeni adlandırma standardından en iyi yararı görüyorum.

En önemli şey, tek bir standart olması ve bunu herkes tarafından izlenmesi.


1
Resmi adlandırma standardı olmayan ("önek sp" dışında) bir şirketten gelmek , önemli olan tek standarttır.
Glen Solsberry

5

Aradığınız probu bulmaya veya anlamlarını hızlı bir şekilde deşifre etmeye karar vermelisiniz.

Eğer görürsen:

memberGetID memberGetName memberGetThis memberListSomething memberDelete

Bir noktada, zaten 'üye' bulduğunuzda bunu görmezden gelir ve oradan gidersiniz.

Bir telefon defterine bakın. John Smith'i bulmak istiyorsanız, Smith, Dave Smith, John Smith, Robert

Gerçekten bu kadar zor mu? James Bond olmadıkça insanlara soyadlarını, sonra adlarını söylemiyorum.


1
+1 Bu soruyu ve cevapları seviyorum! Kullanılabilirlikle ilgilenir ve bu oldukça zor ve ilginç olabilir.
İş

0

"ObjectVerb" yerine "namespace_verbObject" kullanabilirsiniz Member_GetById.
Yordamları ad alanına göre gruplandırır ve yine de geleneksel "verbSomething" adlandırma kullanır.

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.