Tasarım deseni adını uygulama sınıflarında kullanmak hiç iyi bir fikir miydi? [kapalı]


28

Son zamanlarda bir sürü orta derecede büyük piton kod temeli geldi MyClassAbstractFactory, MyClassManager, MyClassProxy, MyClassAdaptervb sınıfları.

Bir yandan o isimler araştırma ve ilgili kalıplarını öğrenmek için beni işaret ederken, onlar sınıf ne çok açıklayıcı değildi yapar .

Ayrıca, kelimelerin yasak listesi içinde düşmek gibi görünüyor programlama: variable, process_available_information, data, amount, compute: Çok geniş kapsamlı isimleri, bize işlevi hakkında bir şey söylemek kalmamasıdır kendileri tarafından kullanıldığında .

Yani olmalı CommunicationManagerdoğrusu ya PortListener? Ya da belki de sorunu hiç anlamıyorum ...?


Eğer desen ne aşina iseniz o zaman desen adı ancak iyi bir açıklamasıdır sadece bir vb MyClassFactory, bir FooAdapter, olması daha iyidir, desen adı kötü bir fikir
mandal ucube

Sınıfların sadece "AbstractFactory" olarak adlandırılmadığını göstermek için bir soru düzenlendi, ancak bazı tanımlayıcı kelimeler de vardı.
Vorac

1
... ciddiye bir diyordunuz Fctorybir yerine Factory, ya da sadece bir yazım hatası bu?
Izkata

@ Izkata, lol, benim hatam. Ancak Adaptör ve Adaptör vardı!
Vorac

Yanıtlar:


47
  • AbstractFactorygerçekten bir isim için kötü bir seçimdir. Bu fabrika tarafından neyin yaratıldığını bilmenin bir yolu yoktur ve Animals'yi oluşturan bir varlık aradığınızda, karşılık gelen fabrikayı asla isimle bulamazsınız.

  • AnimalAbstractFactoryBirçok dilde, öyle olurdu, çünkü akıllıca bir seçim değil ne gereksiz ile abstractimza anahtar kelime.

    Bunun söylendiği gibi, yorumların vurguladığı, aslında Abstractisme dahil edilmesi gereken birkaç iyi neden var: sadece tam imzanın olmadığı birkaç içerik değil, aynı zamanda AnimalFactorybir arabirim için de akıllıca bir seçim olabilir (maalesef, dilin / çerçevenin sözleşmesi ile arayüzlerin ön eki olmadığı sürece I)

  • AnimalCreationUtilityaynı zamanda kötü bir seçim olacaktır: eğer bir fabrikaysa , kodu okuyacak insanlar için işleri kolaylaştırın ve fabrika olarak adlandırın .

  • abstract AnimalFactorytamam. Bu fazlalık var ve bu olduğu açıktır gelmez ise bir soyut olan delegeler kendi çocuklarına hayvanların oluşturulmasını fabrikası.

Bu nedenle, evet, tasarım deseninin adı da dahil olmak iyi bir fikirdir, ancak adın yalnızca bir parçası olmalı ve imzanın diğer kısımlarıyla gereksiz olmamalıdır.


2
Bu neden öne çıkan bir yere yorum yazmaktan daha iyidir? "Bu modülde MVC'yi uyguluyoruz. Sebepler: ... Modeller: ... İzleme Sayısı: ... Kontrolörleri: ... Yapı haritası: ... API :. .. ".
Vorac

37
@Vorac: Açık bir ada sahip olmak , yorumlara güvenmekten her zaman daha iyidir.
Arseni Mourzenko 16:13

2
@Vorac er ya da geç birileri, bu belirgin yorumu güncellemeden (ya da varlığını bile bilmeden) yeni bir sınıf ekleyecektir. Tüm uygulama boyunca tutarlı bir şekilde kullanılan bir adlandırma kuralını gözden kaçırmak çok zor olsa da.
Konrad Morawski 16:13

2
Proje çözümünüzü gözden geçirirken, ne olduğunu bulmak için her bir sınıf dosyasını açacak mısınız? Hayır. Bu yüzden her zaman tanımlayıcı isim sınıflarına / dosyalarına sahip olmak daha iyi bir fikirdir.
matris

2
İkinci noktaya kibarca katılmamak istiyorum: AnimalAbstractFactory'nin iyi bir seçim olduğunu düşünüyorum, çünkü sınıf beyanında fazlalık olsa da, çocuk sınıfı beyanında çok yardımcı olacağını düşünüyorum: bilgi güzel bir parçası.
Igor

11

Belirli bir örneğe bağlı. Oluşturucu paterni, sınıfınızı * Oluşturucu olarak adlandırmakla hemen hemen her zaman en iyi şekilde kullanılır;

Desen adını sınıf isminize yazmazsanız ve belki de yapsanız bile, genellikle sınıfa belirli bir desen uyguladığını açıklayan bir yorum yazmalısınız.


3
Tutarlılık burada çok önemlidir, çünkü yalnızca bazı fabrikalar çağrıldığında ...Factory, bir sınıfın bir fabrikayı gerçekleştirmesi, adının kongre kurallarını ihlal etmesi halinde bir fabrika olduğunu fark etmek oldukça zihinsel bir çarpma halini alır.
Konrad Morawski 16:13

10

Desen adlarını sınıflarda kullanmanın amacı, sınıfın ne yaptığını anlamayı kolaylaştırmaktır. AnimalFactory sınıfını adlandırırsanız, sınıfın Animal örnekleri oluşturduğu açıktır. Sınıfınızın adı bir kalıp adı içeriyorsa ve ne yaptığını tarif etmiyorsa, ya yanlış bir kalıp seçtiğinizi ya da yanlış uyguladığını.


1

Bence gerçekten işe yarayabilir. Örneğin:

// Command for retrying card entry with CVN.
public class RetryCardEntryWithCVNCommand { ... }

// Query for getting expired accounts
public class GetExpiredAccountsQuery { ... }

// Decorator for logging exception. Implies that it's an additional 
//mechanism for logging exceptions.
public class LogExceptionToDbDecorator { ... }

// Factory for creating account filters
public class AccountFilterFactory { ... }

1
Bu soruyu soruyu nasıl cevaplıyor? Okuduğumda, "örnekleriniz" yalnızca sınıf adlarının ve kod yorumlarının işe yaramaz bir şekilde kopyalandığını gösteriyor
gnat

Yorumlar, sınıf adının bazılarına açık olmaması durumunda her sınıfın amacını haklı çıkarmak içindir. Bunlara bakarak anında bir şeyler yapan bir komut, veriyi döndüren sorgu, var olan istisna günlüğü mekanizmasına ek davranışlar ekleyen dekoratör ve hesap filtreleri oluşturan bir fabrika olduğumu biliyorum. Bence sınıf isminizle ne kadar betimleyici olursanız, diğerleri için kodunuzu okumak o kadar kolaylaşır. Bir tasarım deseni kullanıyorsanız, o zaman şunu söyleyin - günün sonunda, tasarım kalıplarına sahip olmanın tüm amacı, başkalarının kodunuzu okumasını kolaylaştırmaktır
CodeART
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.