Orada saygı Carl Manaster en güzel cevap, en azından Carl önerdi yolda başlamadan önce düşünmelisiniz bazı dezavantajları vardır.
Hangi en önemli şudur: Biz değişiklik yayılma büyük olasılık taşıyan potansiyel bağımlılıkları sayısını en aza indirmek için kapsüllemeyi kullanın. Senin durumunda, size sınıf içinde özel yöntemleri kapsüllü var: diğer sınıflar için kullanılabilir değildir ve bu nedenle onlara hiçbir potansiyel bağımlılıkları vardır: Eğer onlara yaptığınız değişikliklerin maliyeti minimize ve diğer yayılma düşük probablility vardır sınıflar.
(Eğer bunları test edebilirsiniz böylece) Carl yeni bir sınıfın içine sınıfından bazı özel yöntemler hareketli, ve bu yöntemler kamu yapma anlaşılacağı gibi görünüyor. (Bu arada, neden sadece orijinal sınıfta onları kamu yapmak değil mi?)
Bunu yaparak, başka bir sınıf bunları kullanarak almalısınız potansiyel bu yöntemleri chaging maliyeti artacak, bu yöntemlerin diğer sınıfların 'oluşturan bağımlılıkları engeli kaldırın.
Bu aşağı tarafı minör ve özel yöntemler test edememek ödemek için değerli bir fiyat yargıç, ama en azından bunun farkında olabilir. Durumlarda küçük bir sayıda, gerçekten değerli olabilir, ancak kod tabanı boyunca bu enstitü ise o zaman büyük ölçüde bilinmeyen bir dereceye kadar bakım döngüsünün maliyeti artan, bu bağımlılıkları oluşturacak olasılığını artırmak gerekir.
Bu nedenlerden dolayı, ben, onun öneri olduğunu Carl katılmıyorum "... TDD tasarım geliştirir nasıl büyük bir örnek."
Dahası, "gereksiz işlevselliği filizlenmiş sınıfı içinde sarılı, gitti, bu yüzden özgün sınıf 'tasarım basit ve tek sorumluluk ilkesi daha uygundur ki, orijinal sınıfında.", Devletler
Ben taşınıyor işlevselliği, tüm olmadığını iddia ediyorum Ayrıca, "basit," iyi tanımlanmış değildir "Yabancı".: Kesinlikle bir sınıfın basitlik büyüklüğü ile ters orantılı olduğu durumda olabilir ama bu değil basit-olası sınıfların bir sistem olabildiğince basit bir sistem olacak demek: Bu durumda olsaydı, tüm sınıflar sınıfların büyük bir sayı olurdu bir yöntem ve bir sistem sadece içerecektir; çoklu-yöntemleri-içinde-sınıfların bu hiyerarşik tabakasının uzaklaştırılması, iddia edilebilir ki, sistemi çok daha karmaşık hale getirecektir.
Tek Sorumluluk Prensibi (SRP), ayrıca, herkesin bildiği subjektif ve gözlemci soyutlama düzeyinde tamamen bağlıdır. Bu sınıftan bir yöntem otomatik kaldırma SRP olan uygunluğunu iyileştirir her durum değildir. Bir Yazıcı sınıfı, 10 yöntemleri ile, sınıfının soyutlama düzeyinde baskı tek sorumluluğu vardır. Bu yöntemlerden biri checkPrinterConnected olabilir () ve bir checkPaper (olabilir); yöntem düzeyinde, bu açıkça ayrı sorumlulukları vardır, ancak bunlar otomatik olarak sınıf daha sınıfa ayrılmış gerektiğini önermiyoruz.
Carl "filizlenmiş sınıfında, ekstre işlevsellik kamu olmak için bu nedenle uygun olan, kendi varoluş nedeni olduğunu ve bu nedenle test sadece bir değişiklik olmadan test edilebilir değil.", Tamamlandığında bir işlevselliğe önemini (o en varoluş sebebi- ness) onun varlık kamu uygunluğu için temel değildir. Işlevselliği uygulama müşterinin bağımsızlık maksimize ederken işlevselliği varlık kamu uygunluğu için temel sınıfın işlevselliği kullanılabilir olacak şekilde istemci maruz arayüzü minimize olduğunu. Eğer filizlenmiş sınıfa sadece bir yöntem hareket Tabii ki, o zaman kamu olmak zorundadır. Eğer bir yöntem daha fazla hareket varsa, ancak, sınıfının müşterinin başarılı kullanımı için gerekli olan kamu bu yöntemleri yapmak gerekir: kalkan bu kamu yöntemler çok daha az önemli istediğiniz hangi özel yöntemlerden bazıları daha uzun olabilir sizin istemcisi. (Herhangi bir durumda, ben bir yöntemin önemi gibi "varoluş sebebi," ibaresi aynı zamanda iyi tanımlanmış değildir, bu bir fan değilim.)
Carl önermek için alternatif bir yaklaşım büyümek için sistemi nasıl tasavvur büyük bağlıdır. O bin daha az birkaç sınıf büyüyecek olursa, o zaman bu kopyalanan kaynağı "kamu", "özel" olarak, tüm kayıp değiştirmek, yeni bir dizine kaynak kodu kopyalayın ve daha sonra yazmak için bir komut dosyası sahip düşünebilirsiniz sizin Kopyalanan kaynağına karşı testleri. Bu kodu kopyalayın için gereken zaman ama orijinal kaynağı henüz kopyalanan sürümünde tüm yöntemler denenebilir yapma kapsüllemeyi korunması yararına aşağı tarafı var.
Aşağıda bu amaçla kullanmak yazısıdır.
Selamlar,
Ed Kirwan
!/bin/bash
rm-rf kodu kopya
kod kopyasını oluşturma yankı ...
mkdir kodu kopya
cp-r .. / www kodu kopya /
find code-copy -name "*php" -follow
i için; do
sed -i 's/private/public/g' $i
tamam
php run_tests.php