Bir Ad Alanındaki Sınıf Sayısı - Kod Kokusu?


11

Birkaç yürütülebilir tarafından kullanılan bir C # kitaplığı var. Kütüphanede sadece birkaç isim alanı var ve sadece isim alanlarından birinin içinde birkaç sınıf olduğunu fark ettim. Her zaman sınıflandırma nedeniyle tek bir ad alanında çok fazla sınıftan kaçındım ve bilinçaltından dolayı, daha derin bir ad alanı hiyerarşisine sahip olmak daha güzel görünüyor.

Benim sorum: bir isim alanı birçok sınıf olduğunda - sınıflar birbiriyle ilişkili olsa bile, başka bir "kod kokusu" olarak düşünüyor musunuz? Alt kategorilere izin veren sınıflarda nüanslar bulmak için çok çaba harcar mısınız?


8
Sınıflar söz konusu isim alanına aitse no. Tasarım doğası gereği özneldir, bu yüzden gerçekten söylemek zor ve daha önce tanımladığınız gibi bir tercih meselesidir.
Chris

StyleCop'un söylediği yasa. Eminim hoşuna gitmeyecektir.
İş

2
"Çok az" tanımlayın. 10? 100? 1000?
Eric King

Yanıtlar:


7

Şart değil. Tüm sınıflar gerçekten ad alanı tarafından tanımlanan kategoriye aitse, o zaman sorun yoktur.

Yapabileceğiniz şey, sınıflara bakmak ve bazılarını birleştirme olasılığı üzerine düşünmektir. Bu sınıfların küçük gruplar "aile" işlevselliğini destekleyebilir, ancak bazı tarihi nedenlerle ayrı ayrı uygulanmış olabilir. Artık yeterli zaman geçtiğinde daha iyi bir kompozisyon mümkün olabilir.


6

Çok fazla ad alanı kullanmaktan kaçınmalısınız çünkü bu, bir kitaplığın programcı için kullanımını ve gezinmesini çok daha zorlaştırır. Ayrıca, birçok ad alanı ile tasarımcının her ad alanı için doğru adlar sağlaması ve belirli bir sınıfın hangi ad alanına ait olması gerektiğine karar vermesi zor olabilir.

En basit yol, tüm birincil sınıfları tek bir ad alanına koymak ve gelişmiş senaryo sınıflarını alt ad alanlarına sokmaktır; .NET Framework bunu her zaman yapar, bakın System.Collectionsve System.Collections.Specializedbu uygulamanın iyi örnekleri için.

Yalnızca bir veya iki birinci düzey ad alanı ile, gelişmiş veya özel sınıflarınız programcı bunu keşfetmeye hazır olana kadar gizlenmiş olarak, kodunuz gezinmek çok daha kolay hale gelecektir.


3

Birbirlerine ait oldukları ve birbirleriyle ilişkili oldukları sürece, bir ad alanında çok fazla sınıf bulunmasıyla ilgili bir sorun yoktur.

Bir sınıfın kendi ayrı ad alanına ait olup olmadığı kişisel tercih meselesidir.

Daha doğal olan ne?

Parsers.XML.XmlParser.cs
Parsers.XmlParser.cs

Bu tamamen kodunuzu nasıl görmek ve çağırmak istediğinize bağlıdır .

Şahsen, sadece ayrı bir sınıftan daha fazlası olacağını bildiğimde ayrı ad alanlarını tercih ederim .


0

Bu iyi. İsim alanlarına sahip olmanın birincil nedeni isim çarpışmalarından kaçınmaktır ve ancak bundan sonra kural yerine kişisel seçim meselesi olan mantıksal kapsamı düşünmeliyiz. Elbette bazı mantıklı kurallar açıktır. Hiç kimse bir ad alanında 3k ~ 4k sınıfları arasında gezinmek istemez.

İyi bir örnek, kendi algoritmalarınızı standart olanlardan ayırmanıza izin veren C ++ Standart Kitaplığı'ndaki std ad alanıdır .


-1. İsim çarpışması önemlidir, ancak sınıfların kavramsal gruplandırılması da önemlidir.
umlcat
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.