Neden Numaralandırmalar, Soyut sınıflar ve Yapılar önekini eklemiyoruz?


11

C # topluluğu, en deneyimsiz programcıların bile bunu kullanmayı bildiği bir arabirimi belirtmek için her zaman "I" önekini kullandı.

Öyleyse neden numaralandırmalara, soyut sınıflara veya yapılara ön ek vermiyoruz (muhtemelen "E", "A" ve "S" ile)?

Örneğin, tüm soyut sınıfları "A" ile işaretlediysek, bu tür hakkında, çıkartılabilirken hemen hemen belirgin olmayan değerli bilgiler sağlayacaktır.

Lütfen bu değişikliği savunmuyorum, sadece işleri neden bu şekilde yapmadığımızı anlamaya çalışıyorum.

Bu iplik biz "I" öneki kullanırım ama biz neden cevap vermez neden cevaplar yok diğer önekleri kullanın.


3
Yinelenen kapanış için oy verirdim, ancak cevap SO stackoverflow.com/questions/111933/…
Euphoric

1
@Euphoric: Bu soru çok daha spesifik.
reinierpost


IMO Numaralarından kaçınılmalıdır (genel statik salt okunur üyelerle (enum kalıbı) değiştirilmelidir), soyut sınıfların "temel" soneki olmalı ve yapıların bir adlandırma kuralı olarak küçük harflere sahip olması gerekirdi , ancak .NET bunu yapmadığı için, Yapıları küçük harfe çevirirseniz kafa karıştırıcı olur, çünkü asla tutarlı olmayacaktır.
Dave Cousineau

Neden numaralandırmayı psuedo sıralaması oluşturmak için kullanmıyorsunuz?
Stephen

Yanıtlar:


27

Arabirimler için adlandırma kuralının amacı, sınıfınızın uyguladığı arabirim olarak adlandırılacak şey hakkında hızlı, beyinsiz bir karar vermektir. Eğer bir bağlantınız varsa Frobnicator, ancak ayrılma veya herhangi bir sebep için bir arabirim beyan etmek zorundaysanız, o zaman arama kararı IFrobnicatorbilinçli bir düşünce gerektirmez ve bu iyidir.

Aynı sorun, adlandırdığınız diğer yapılar için de geçerli değildir. Numaralandırmalar ve yapılar yararlıdır, ancak adın kendisine ek olarak ikinci , kısa, şeffaf, açıkça ilişkili bir ad bulmak gerekli değildir . Bu nedenle, bir "E" nin bir enum veya yapı adına vurulması için herhangi bir baskı yoktur.

(Soyut sınıflar arayüzlere biraz benzer, çünkü herhangi bir şeyi yapmak için ikinci, somut bir sınıf sağlamanız gerekir, bu yüzden 'A' ile başlama konvansiyonu kazanmış olabilirler, ancak her ne sebeple olursa olsun olmadılar. Spekülasyon yapmama izin verildi, bence özellikle dar bir mektup olmanın bununla bir ilgisi olabilirdi.)


5
+1 Bu yazdığım cevap. O soyut sınıflar zaten soyut sınıf adlı bir mükemmel cromulent adlandırma kuralı, olsa ben işaret ediyorum AnimalBaseve farklı tatlar vardır AnimalGiraffe, AnimalLionvb
İkili worrier

Pek çok Java arabiriminin 'ben' kullanmadıklarından bahsetmeye değer olabilir List, çünkü teknik olarak adlandırılmış ArrayListve LinkedListuygulamaların adlarıdır. (C #, sanırım IList, arayüz Listolarak ve dizi listesi olarak var)
Katana314 23:13

O yararlı olmuş olabilir, eğer Microsoft için tavsiye etmiş, ben, yolu geri merak değişkenler konusunda karışıklığı önlemek için, "değişken" yapı tiplerinin belirli bir önek verilecek Point p = myPoints[3]; p.X += 3;etkileyecek myPoints[3].X. Retrospektif olarak, ben C # var->fieldsınıf-alan erişimi ve var.fieldyapı-alan erişimi için kullanmak tercih ederdim , ama tabii ki değil. Yine de, onları bir bakışta ayırt etmenin bazı yararları olacaktır.
supercat

1

Bence çok kullanılmıyor çünkü:

  • çoğu zaman bir enum mu yoksa soyut bir sınıf mı yoksa bir yapı mı?
  • Eğer mater yaparsa muhtemelen kullanımdan görebiliyorum ve aksi takdirde oldukça hızlı bir şekilde öğrenebilirim
  • bunu bir enum, soyut sınıf veya yapı olarak değiştirirsem, onu da yeniden adlandırmam gerekir
  • sözleşmeyi bilmeyen insanlar için saf bir gürültü.
  • Macar fikrini kullanmamaları öğretildiği için insanlar tüm fikri reddedebilirler. Apps Hungarian ve Systems Hungarian arasında ayrım yapmadan Hungarion gösterimini kullanmamanız gerektiğini söyleyen insanlar var ve hala var. Bu SO sorusunda güzel bir tartışma bulunabilir . Sadece ilk cevap ilginç değil, aynı zamanda harika cevaplar ve yorumlar da var. Aynı sorudan Joel Spolsky'nin bu makalesi de geliyor ("Ben Macaristan'ım" paragrafına gidin)

kısaca: Genel olarak katma değer maliyete katkıda bulunmaz.

Son mermi noktasından ve sonuçlandırabileceğiniz bazı yorumlardan. Sistem Macarca (ön ek türü) bozuk ve kullanılmamalıdır. Apps Macarca (önek tür) kullanır.

Sorunuzu geri alarak, önerilen gösteriminizin bir uygulama Macarca formu olduğunu düşünüyorum ve katma değerin maliyetlere katıldığını düşünüyorsanız ve bunu kod tabanınızda tutarlı bir şekilde uygularsanız iyi olur. Ancak proje bazında değerlendirmeniz gerektiğinden, genel bir kural olmamalıdır.

Sanırım insanlar arayüzler için daha sık malzeme yaptığını fark ettiler ve bu yüzden arayüzler için genel bir kural haline geldi.


-1

Sadece (umarım uygulanabilir) bir düşünce:

Somut sınıflardan ziyade 'arayüzlere kodlama' yönünde açık bir eğilim var. "Günümüzde" sınıflar için bir adlandırma kuralına sahip olmak, arayüz için 'I' harfine sahip olmak yerine, 'C' ile başlamak gibi daha faydalı görünmektedir.

Tüm Arayüzlerin aslında Model olarak adlandırıldığı bir Java projesini sonlandırdım .. Evet, arayüz adı kuralı, adı 'Model' ile bitirmekti ... sonra bir tür 'DataTransferObject / DTO' arayüzünü uygulamak :

public interface SomethingModel{
}

public class Something implements SomethingModel{
    //lets not line up braces and make it hard to read
    //at least it saves one line
}

oysa C # 'da

public interface ISomething{}

public class SomethingModel : ISomething
{
   //i can read this
}

Beynimi o düz incinmek için yeniden kablolamak, ama arayüze programlama terimleri düşünmenin nasıl yardımcı olabileceğini görebiliyorum.

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.