Oldukça büyük bir ürün üzerinde çalışıyorum. .Net 1.0 hala devam eden bir çalışmadı ve bu yüzden çok sayıda kötü kalite koduna sahipti ve ünite testleri ile yazılmamıştı. Şimdi kaliteyi geliştirmeye çalışıyoruz ve her özellik ve hata düzeltmesi için testler uyguluyoruz. Şu an yaşadığımız en büyük sorunlardan biri bağımlılık cehennem ve tanrı nesneler. Özellikle bir tanrı nesnesi var, bu kötü: Session
. Temel olarak, programın mevcut oturumu ile ilgili herhangi bir şey bu nesnede. Başka birkaç tanrı nesnesi de var. Her neyse, bu tanrı nesnesini Resharper'ı kullanarak "alay edilemez" hale getirdik. Bununla birlikte, bu hala test etmeyi zorlaştırır çünkü çoğu zaman 100 farklı yöntem ve özellikten uzak durmanın neye ihtiyaç duyduğunu anlamak için yazdığınız koda bakmanız gerekir.Tanrısal nesnelerin parçalanması için arabirim mirası?
Sadece bu sınıfa ayırmak şu anda soruların dışındadır çünkü bu sınıfa binlerce referans olmasa bile yüzlerce kelimenin tam anlamı vardır.
Çünkü bir arabirimim var (ve hemen hemen tüm kod arabirimi kullanmak için yeniden kodlanmıştır), ilginç bir fikrim vardı. ISession
arayüzünü diğer arayüzlerden miras bıraktıysam ne olur? güncelleştirilmesi olmazdı ISession kullanarak kod mevcut, bu sayede
interface IBar
{
string Baz{get;set;}
}
interface IFoo
{
string Biz{get;set;}
}
interface ISession: IFoo, IBar
{
}
, ne de fiili uygulama güncellenmesi var: Biz böyle bir şey olsaydı Örneğin
. Ancak, yeni kodda yazdığımız ve yeniden düzenleyeceğimiz daha ayrıntılı IFoo veya IBar arayüzlerini kullanabiliyoruz, ancak bir İdaleye geçebiliyoruz.
Ve sonunda, ben muhtemelen daha kolay sonunda size Şimdi asıl ISession ve Oturum tanrı arayüzü/nesne
kırmak için yapım görüyoruz. Bu, bu tanrı nesnelerine karşı test etmenin ve sonunda onları kırmanın iyi bir yolu mu? Bu belgelenmiş bir yaklaşım ve/veya tasarım deseni mi? Hiç böyle bir şey yaptın mı?
+1: Adım adım refactoring yapmak için mantıklı bir yol gibi geliyor. –
Eğer kontrol etmediyseniz, Michael Feathers'ın [http://amzn.com/B005OYHF0A], [Legacy Code With Legacy Code ile Çalışıyor] değerli olduğunu kanıtlayabilir. Test altında böyle bir proje oluşturmanıza yardımcı olacak birçok strateji içerir. Birçoğu apaçık, ama onları baskıda görmek size zorlamak ve bunu yapmak için güven verir. –
@AnthonyPegram aslında benim liste – Earlz