Çok sayıda / import deyimi kullanmak kötü tasarım veya kod kokusunu gösteriyor mu?


13

Genellikle, sınıf dosyasının üst kısmında birkaç kullanarak deyimi görüyorum. Misal:

using System.Collections.Generic;
using System.IO;
using System.Xml.Linq;

Ama üzerinde çalıştığım bir projede, birkaç kez bir sınıf dosyasında 20 veya daha fazla kullanım / ithalat görüyorum. Bu kötü tasarım mı? Bir şeyi yapmak için tasarlanan sınıfların sadece birkaç bileşene bağlı olması gerektiği anlaşılıyor.


1
Visual Studio'nun kullanılmayan usingifadeleri kaldırma seçeneği vardır . Bu 20'den kaçının gerçek kullanımda olduğunu görmek isteyebilirsiniz.
Dan Pichelman

@ Dan - Kullanılmayanları ayıklamak için ReSharper'ı kullandığım için hepsi kullanılıyor.
Jon Raynor

usingSınıf sayısını artırmak zorunda kalmadan ifade sayısını azaltıp azaltamayacağını görmek için bir IoC eklemeyi, yapıcı enjeksiyonuna dönüştürmeyi ve / veya bazı entegrasyon noktalarını satır içi lambdas'a dönüştürmeyi denediniz mi? Sınıfların veya kaynak dosyaların sayısının artmasının kaynak kodu yönetimi ek yükünü artıracağını unutmayın.
rwong

2
IoC sorunu gizliyor.
Telastyn

1
Bu şeylerden bazıları, Collections.Generic ve LINQ gibi neredeyse dilin ve teşvik ettiği programlama tarzının bir parçası, bu yüzden bunlar hakkında endişelenmem gerekmiyor. Muhtemelen dikkatimi diğerlerine odaklardım. Çoğu sınıfın muhtemelen doğrudan IO yapmasına gerek yoktur, bu nedenle, belki de her yerde bulunursa, sorumlulukların veya zayıf katmanlamanın bazı sorunları vardır, ancak uygulamaya bağlıdır.
Erik Eidt

Yanıtlar:


21

Kötü bir tasarımı gösterebilir, evet. Bakmakta olduğunuz sınıf çok fazla şey yapıyor olabilir, ancak bu, içe aktardığınız ad alanlarının, ad alanı ayrımının ima ettiğinden çok daha fazla bağlı olduğu anlamına da gelebilir. Bunun nedeni aşırı mühendis veya aşırı soyutlama olabilir, ancak aynı zamanda kullanıma iyi uymayan bir tasarım da olabilir.

Bununla birlikte, bu bir koku - bazen sizi kötü bir şeye götürür ve bazen sadece yanlış bir alarmdır.


Ben gerçek "kod kokusu" ithal ad alanlarının hepsi ya da çoğunlukla, çılgınca amaç farklı olacağını düşünüyorum. Dürüst olmak gerekirse, nadiren usingtek bir C # dosyasında 6-8 ' den fazla vardı .
Greg Burghardt

2
Sadece "kod kokusu" terimini doğru kullanmak için yapabilseydim sana ikinci bir +1 vermek istiyorum!
Jörg W Mittag

! @Greg - Kabul ediyorum, genellikle "kullanımlar" ilişkilidir. Bu durumda bu soyutlama üzerinde bir durum olduğunu düşünüyorum çünkü "kullanım" yaklaşık 15-20 uygulama ad alanlarından ve geri kalanı .net çerçevesinden geliyor.
Jon Raynor

2

Bir sınıf, amaçlanan bir işlevi sağlamak için gerekenden daha büyük ve daha küçük olmamalıdır.

Bir uygulamada, bir işi olan bir şifreleme sınıfı var: verileri şifrelemek. Temel işlevsellik, günlüğe kaydetme ve özel durum işleme arasında, ortam bu işi yapmak için 11 ayrı ad alanı ithalatı gerektirir.

Kendime 'ithalatı en aza indirgemek' söylemek zor. Veya sınıfımın başarısını yalnızca içe aktarılan ad alanlarını sayarak değerlendirmek. Bunu haklı olarak, bir sınıfın başarısının bir göstergesi olarak kullanamam. Bana göre 'ithalat', sınıfın sonu demektir. Sınıfın işi iyi tanımlanmışsa, ithalatı da içeren destek sistemindeki diğer her şey kendi kendine bakacaktır.

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.