Bob Amca 'isim öbek adları' ile ne anlama geliyor?


14

Bob Amca'dan Temiz Kod okuyorum . Anadili İngilizce olmayan biri olmadığım için şu ifadeyi anlayamadım:

Sınıflar ve nesneler gibi isim veya isim tamlaması ada sahip olmamalıdır Customer, WikiPage, Account, ve AddressParser. Kaçının kelimeler gibi Manager, Processor, Data, veya Infobir sınıfı adına. Sınıf adı bir fiil olmamalıdır.

Ben, hiçbiri bildiği gibi Manager, Processor, Datave Infobir fiildir, değil mi? Vurgulamak istediği gerçek nokta nedir?


belki Bob Amca, nesneler olarak kaynak erdemlerini öven RESTful düşüncesini benimser.
rwong

Yanıtlar:


21

Üç nokta ayrıdır:

  • Sınıf isimleri isim veya isim cümlesi olmalıdır . Bu, sınıfın adının bir fiilin konusu olacak bir şey olması gerektiği anlamına gelir. Nesneye yönelik tasarım söz konusu olduğunda, yöntemler sınıfın temsil ettiği şey üzerinde gerçekleşen fiiller olacaktır.

  • Bazı kelimelerden kaçınılmalıdır. Managerolası bir tanrı sınıfını gösterir . Infove Datasahte bir veri kabını gösterebilir. Bunun gibi kelimeler sorunlu alanın zayıf modellenmesini gösterebilir.

  • Fiiller asla sınıf isimleri olmamalıdır. İlk noktaya bakın - sınıflar model şeyler, yöntemler model eylemler.


1
Bunun gibi kelimeler sorunlu alanın zayıf modellenmesini gösterebilir. - Seçilmiş isimlerden bağımsız olarak sorunlu alanın kötü bir şekilde modellenip modellenmediğini düşünebilirsiniz. İyi bir isim kötü bir tasarıma yardımcı olmaz; ve iyi bir tasarım, zayıf bir adla çok az zarar görür.
Ingo

Sınıfınızı nasıl geliştirdiğinizi ve dış dünyayla nasıl etkileşime girdiğini düşünürken bunu bir adım daha aşağıya çekebilirsiniz - sınıfın özellikleri genellikle isimler olurken, sınıfın yöntemleri genellikle fiiller olacaktır
PeteH

Projenizin "Yönetici" veya "Bilgi" veya "Veri" olarak adlandırmayı düşünebileceğiniz bir sınıfı varsa, büyük olasılıkla bir düzine sınıfı vardır, bu da bu adları kullanmayacağınız anlamına gelir. Bir ThisManager ve ThatManager ve AnotherManger'a sahip olacaksınız.
gnasher729

Fiillerin asla sınıf isimlerinde olmaması gerektiğini söylüyor, ama sadece Anlamlı Bağlam Ekleme'yi tekrar okuyordum ve sayfa 29'daki örneğinde GuessStatisticMessage sınıfını adlandırıyor. Şimdi kural konusunda kafam karıştı, çünkü Guess'i bir isim yerine fiil olarak yorumluyorum. dictionary.com/browse/guess?s=t
Devin Gleason Lambert

2
@DevinGleasonLambert Ama tahmin değil. Bu bir Tahmin İstatistik Mesajı. Mesaj bir isimdir. Tahmin İstatistiği sadece mesajın türünü açıklar - tahmin istatistikleriyle ilgili mesajlar.
Thomas Owens

7

Şeyler (isimler) ve eylemler (fiiller) arasında bir ayrım yapmaya çalışıyor . Geleneksel nesnel odaklı tasarımda, sınıfları bir şey olarak ve onların yöntemlerini bu şeylerin gerçekleştirebileceği eylemler olarak düşünüyoruz. To yönetmek ederken, özen veya koordine etmektir yöneticisi yöneten bir kişi ya da bir şeydir.

Tanıtım kitapları genellikle Bark ve Bite yöntemleriyle Dog adlı bir sınıf gibi mümkün olan en basit ve en belirgin terimlere indirgenir . Gerçek dünya sınıflarında, ayrım genellikle biraz daha incedir, ancak hala oradadır. Ancak Bob Amca'nın yaptığı nokta, yöneticinin bir isim olduğu, ancak yöneticinin ne yaptığına ve ne olduğuna çok fazla dikkat çektiğine inanıyorum - tam olarak ne olduğunu açıklamak için çok belirsiz bir kelime yönetiliyor ya da nasıl.


5
Ne yazık ki, bu tür düşünme yanlış tasarımlara yol açabilir. En önemli örneklerden biri, bir banka hesabının klasik tanıtım örneğidir. Neredeyse tüm OO kitaplarında, Accountbir nesnedir, balancebir alandır ve transferyöntemdir. Ancak doğru tasarım şöyle olur: Transferbir nesnedir, accountbir alandır ve balancebir yöntemdir. Bankacılık sistemleri gerçekte bu şekilde uygulanır ve bankacılık gerçekte bilgisayarlardan önce çalışır.
Jörg W Mittag

@ JörgWMittag: bu uyarıcı masal bir cevap olarak yayınlanmaya değer; bunların genel yönergeler olduğunu ve bazı nadir durumlarda kötü ayrışmaya yol açabileceğini unutmayın.
smci
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.