Ad alanı ve içindeki sınıf için aynı adı kullanmak sorunludur.
Ad alanı birden fazla sınıf içeriyorsa, neden diğer sınıflar oraya konsun? doğru hissetmiyor, çünkü ad alanının isminin amacı sadece içindeki değil, içindeki tüm sınıfları tanımlamak . Örneğin, bir ad alanında ve sınıflarınız varsa JsonSerialization
, ad alanınızı adlandırmak mantıklı olur mu?BinarySerialization
XmlSerialization
XmlSerialization
Genelde olan şey, bir sınıfın varolan bir ad alanından çıkarılması veya birden çok sınıf veya başka bir yeniden yapılanma arasında bir birleşme nedeniyle, kendinizi büyük bir sınıf içeren bir ad alanıyla bulmanızdır ; aşamalı olarak, küçük sınıflar oraya yerleştirilir çünkü orjinal sınıfla biraz ilişkilidir. Örneğin, bir ad LogParser
, tek bir sınıf içerebilir LogParser
ve sonra birileri koyar LogConverter
oldukça, daha sonra ayrıştırıcı alakalı çünkü LogSearcher
vb Buradaki sorun ad alanının adı değiştirilmedi şudur: yakında kadar LogConverter
eklenmiş, adın, LogsProcessing
veya olarak değiştirilmeliydi Logs
.
Ad alanı yalnızca bir sınıf içeriyorsa , kod organizasyonu içindeki bir sorunun işareti olabilir .
Birkaç kez, uygun SOLID ilkelerine sahip tek bir sınıfın, kod tabanındaki herhangi bir şeyden çok farklı olduğu ve dolayısıyla özel bir ad alanına yerleştirildiği durumları görmeme rağmen, bu tür durumlar nadirdir. Daha sık olarak, bu bir sorunun göstergesidir. Benzer şekilde, hiçbir şey tek bir yöntem içeren bir sınıfa sahip olmanızı engellemez, ancak çoğu zaman bu tür sınıflar bir sorunu işaret eder.
Ad alanınız yalnızca bir sınıf içeriyor olsa bile, genellikle sınıfı adlandırırken daha belirgin olmanın ve ad alanını adlandırırken daha genel olmanın bir yolu vardır. Belirli bir anda, ABC biçiminde yazılmış dosyaları DEF biçimine dönüştürmesi gereken bir uygulamayı düşünün. Dönüşüm, işletme nesnelerine / işlerinden seri hale getirme / serileştirme gerektirmez ve dönüşüm sınıfının içine konacak kadar kısa olan bir sürü normal ifade uygulayarak yapılır.AbcToDefConverter
. Tüm dönüşüm mantığı, yaklaşık on birbirine bağlı yöntemde yaklaşık 80 LLOC alır - var olan sınıfı ayırmaya veya ek sınıflar yaratmaya kesinlikle gerek olmayan bir durum gibi görünüyor. Uygulamanın kalan kısmının dönüşümlerle hiçbir ilgisi olmadığı için, sınıf mevcut ad alanlarında diğer sınıflarla gruplandırılamaz. Böylece biri denilen bir ad alanı yaratır AbcToDefConverter
. İçinde yanlış olan hiçbir şey olmamasına rağmen, kişi gibi daha genel bir ad da kullanabilirdi Converters
. Python gibi dillerde daha kısa isimlerin tercih edildiği ve tekrarlamanın üzerine atıldığı dillerde bile olabilir converters.Abc_To_Def
.
Bu nedenle, ad alanları için içerdikleri sınıflardan farklı adlar kullanın. Bir sınıfın adı, sınıfın ne yaptığını belirtmek zorunda iken, ad alanının adı, içine konulan tüm sınıflarda ortak olanı vurgulamalıdır.
Bu arada, faydalı sınıflar doğası gereği yanlıştır: isteğe bağlı kesin aritmetik gibi belirli bir şey eklemek yerine , diğer sınıflarda yolunu bulamayan her şeyi içerir . Bu, sadece Miscellaneous
masaüstünde bir dizin olarak, organizasyon eksikliğinin göstergesi olan bir şey olarak, kötü adlandırmadır .
Adlandırma bir sebepten dolayı vardır: daha sonra bir şeyler bulmanız gerektiğinde hayatınızı kolaylaştırmak için. Bir grafik çizmeniz gerekirse, “grafik” veya “arsa” aramayı deneyebilirsiniz. Bir uygulamanın fatura oluşturma şeklini değiştirmeniz gerektiğinde, “fatura [e / ing]” veya “fatura” kelimesini ararsınız. Benzer şekilde, kendinize söyleyeceğiniz bir durumu hayal etmeye çalışın: “hm, bu özellik muhtemelen misc ile bulunur”. Yapamam
.NET Framework'e bakın. Bu sınıfların çoğu yardımcı sınıflar değil mi? Demek istediğim, işletme alanıyla ilgili yapacakları çok az şey var. Bir finansal uygulama veya bir e-ticaret web sitesinde veya bir sonraki nesil eğitim platformunda çalışıyorsam, XML'i seri hale getirmek veya dosyaları okumak veya SQL sorguları yapmak veya işlem yapmak hepsi faydalıdır. Ancak, çağrılmazlar UtilitySerialization
veya ad alanında UtilityTransaction
değildirler Utility
. İhtiyacım olduğunda onları bulmayı mümkün kılan (ve kolay, .NET geliştiricileri sayesinde!) Uygun isimleri var.
Aynı için geliyor senin yaygın olarak uygulamalarınızda yeniden sınıflar. Onlar faydalı sınıflar değil. Onlar belirli şeyleri yapan sınıflardır ve yaptıkları şeyler aslında sınıfların adları olmalıdır.
Birimlerle ve birimlerin dönüşümüyle ilgili bazı kodlar oluşturduğunuzu hayal edin. Adını verebilir Utility
ve meslektaşlarınız tarafından nefret edilebilirsiniz; veya adını Units
ve adını verebilirsiniz UnitsConversion
.