2009-02-22 23 views
10

Ben bir arayüz veya sınıf tarafından temsil bir kavram var bir durumda sık sık duyuyorum, sonra alt sınıfları/uzatın subinterfaces bir dizi var. Örneğiniyi uygulama

: bir genel "DoiGraphNode" Bir "DoiGraphNode" vb

I ilişkili bir yol ile bir Java kaynak Bir "DoiGraphNode" i temsil eden bir kaynak Bir "DoiGraphNode" vb temsil eden Üç adlandırma kuralı düşünebilir ve nasıl seçileceğine dair yorumları takdir edebilir.


Seçenek 1: Her zaman kavramının adıyla başlar. Böylece

: vb DoiGraphNode, DoiGraphNodeResource, DoiGraphNodeJavaResource, DoiGraphNodeWithPath,

Pro: Ben uğraşıyorum neyi çok açıktır, ben

Con olan tüm seçenekleri görmek kolaydır: Pek doğal? Her şey aynı görünüyor mu?


Seçenek 2: Özel öğeleri en başa koyun. Böylece

: vb DoiGraphNode, ResourceDoiGraphNode, JavaResourceDoiGraphNode, PathBaseDoiGraphNode, vb

Pro: Ben kodunda görebilirsiniz zaman çok açıktır

Con: Özellikle, bu zor olabilir bulma adını hatırlamıyorum yoksa, görsel tutarlılık eksikliği


Seçenek 3: özel malzeme koyun ve gereksiz metnin bir kısmını kaldırmak

Böylece: DoiGraphNode, ResourceNode, JavaResourceNode, GraphNodeWithPath

Pro: yazıp Con okumak için bu kadar değil: diğer isimlerle

ne gibi

cevap

4

Adı onları seçeneği muhtemelen daha yaygındır seçeneği 3 kullanın ve benim deneyimlerinden diğer insanların kod seçeneği 2 bakıyor. isimlerini sert veya belirsiz ise

, genellikle Sınıf çok fazla (Tek Sorumluluk Prensibi) yaptığını bir işarettir.

, çatışmaları adlandırma önlemek uygun şekilde ad alanlarını seçin.

personnally, ben üç tane daha mantıklı miras kavramından izler 3

+1

Üçüncü seçeneği de seçtim. İlk ikide, "biraz farklı olan, uzun bir ismin labirentine" girme tehlikesi vardır, burada onları okumakta zorlanırsınız ve hatta hangi kavramın hangi kavramla örtüştüğünü hatırlarsınız. – starblue

5

Kullanım çakışabilir, çok tutarsız cr * p, Görünüşe, Bu öznel bir şey. Önemli olan her sınıf neyi temsil açıklığa kavuşturmak ve isimleri miras ilişkileri mantıklı şekilde olmalıdır. Gerçekten de, isimlerin ilişkileri kodlamak için bu kadar önemli olduğunu sanmıyorum; Bu belgeler (Adlarınız nesneler için uygun olup olmadığını ve insanlar ne devraldığı ne kadar iyi tahmin yapma mümkün olmalıdır) bunun için var. Ne olursa olsun için

, ben genellikle ne olduklarını 1.

0

Seçeneği kullanmayı tercih ediyorum. Arayüzü veya sınıfı uzmanlaştığınız için, ad, artık temel uygulamayı (varsa) kullanmadığını göstermelidir.

bir sınıf devralır görmek için araçlar çok sayıda bulunmaktadır, bu nedenle sınıfın gerçek fonksiyonunu gösteren bir özlü adı adının içine çok fazla türde bilgileri paketi çalışırken daha iyi olacak.

2

Bir kodlama standartları belgedeki bazı rehberlik bulabiliriz, örneğin C# here için iDesign belge yoktur.

Şahsen, Bu genellikle yolu .NET Framework isimler nesnelerini olan seçeneği 2. tercih ederim. Örneğin, özellik sınıflarına bakın. Hepsi Attribute (TestMethodAttribute) ile biter. Aynısı, EventHandlers için de geçerlidir: OnClickEventHandler, Click olayını işleyen bir olay işleyicisi için önerilen addır.

Genellikle kendi kodu ve arayüzü tasarımı bu takip etmeye çalışıyorum. Böylece bir IUnitWriter bir StringUnitWriter ve bir DataTableUnitWriter üretir. Bu şekilde her zaman temel sınıfının ne olduğunu ve daha doğal olarak okudum. Kendini belgeleyen kod tüm çevik geliştiriciler için son hedeftir, bu yüzden benim için iyi çalışıyor gibi görünüyor!

1

Genellikle sınıfları polymophically kullanılacak özellikle 1. seçenek benzer isim. Sebeplerim, en önemli bilgilerin ilk olarak listelenmesidir. (Bu, alt sınıfın temel olarak atadan ne olduğu, (genellikle) uzantılarının 'eklendiği'). Bu seçeneği de beğeniyorum çünkü sınıf adlarının listelerini sıralarken, ilgili sınıflar birlikte listelenecektir. I.e. Genelde çeviri birimi (dosya adı) ile aynıdır, böylece sınıf dosyaları birlikte listelenecektir. Benzer şekilde bu, artımlı aramada kullanışlıdır.

Programlama kariyerimde daha önce 2. seçeneği kullanma eğilimindeyim, bunun için bundan kaçınmalıyım çünkü siz “tutarsız” demeniz ve çok ortogonal görünmüyorsunuz. alt sınıf olarak uzamasını veya şartname sağladığında veya isimler oldukça uzun olurdu

Sık sık seçeneği 3 kullanın. Örneğin , benim dosya sistemi adı sınıfları dize türetilmiş ancak büyük ölçüde Dize sınıfını genişletmek ve bir ölçüde farklı kullanım/anlama sahip gibidir: dize türetilen

Directory_entry_name geniş işlevselliği ekler. Directory_entry_name'den türetilen dosya_adı oldukça özel işlevlere sahiptir. Directory_entry_name'den türetilen dizin_adı da oldukça özel işlevlere sahiptir.

Ayrıca, seçenek 1 ile birlikte, genellikle bir arabirim sınıfı için nitelenmemiş bir ad kullanıyorum. Örneğin bir sınıf interence zincire sahip olabilir:

  • Metin (bir arabirim)
  • Text_abstract (Özet (baz) genelleme sınıfı)
  • Text_ASCII
  • Text_unicode (kodlama ASCII için özel somut sınıfı) (Unicode kodlaması için özel somut sınıf)

Arabirim ve soyut temel sınıfının otomatik olarak sıralanmış listede ilk olarak görünmesini tercih ediyorum.