Ortak kod lehine bir argüman, tek bir yerde değiştirirseniz, kodun yalnızca bir akışını etkilemesidir. Bu, çoğu zaman değil, onu kullanan her kod parçasını etkilemek için bir değişiklik istediğiniz gerçeğine karşı dengelenmelidir. Ancak bu argümanı destekleyen nadir örnekler gördüm.
Diyelim ki bir kod parçanız var
public ForTheBar(Foo foo)
{
Bar bar = foo.bar();
return bar.BeFooed();
}
Bu, kodunuzdaki yaklaşık 2 yerde kullanılır.
Bir gün birisi gelir ve "tamam, sadece bu yolda, Fooing'den önce çubuğu Grommit yapmanızı istiyoruz."
Ve sizce "bu basit."
public ForTheBar(Foo foo, bool shouldIGrommit)
{
Bar bar = foo.bar();
if (shouldIGrommit)
{
bar.BeGrommitted();
}
return bar.BeFooed();
}
Sonra kullanıcı bazı yeni işlevsellik ekler ve sizce FooTheBar ile iyi uyuyor. Ve onlara, Foo'dan önce o barı Grommit yapman gerekip gerekmediğini sordun ve "hayır, bu sefer değil" diyorlar.
Yani yukarıdaki yöntemi çağırmalısınız.
Ama sonra kullanıcı "tamam, bekle, üçüncü durumda, BeFooed'i aramadan önce Çubuğu Doodle yapmanızı istiyoruz."
Sorun değil, sence, bunu yapabilirim.
public ForTheBar(Foo foo, bool shouldIGrommit, bool shouldIDoodle)
{
Bar bar = foo.bar();
if (shouldIGrommit)
{
bar.BeGrommitted();
}
if (shouldIDoodle)
{
bar.BeDoodled();
}
return bar.BeFooed();
}
Aniden kodunuz daha az kaynak plakası haline geliyor. Belki de tekrarlanan iki kod satırını kabul etmiş olmalısınız. Şimdiye kadar her biri 2-3 satır uzunluğunda ve artık tekrarlanan çok fazla görünmeyen üç kod parçasına sahip olacaksınız.
Bütün bunlar, "bu yaygın bir durum değil ve bu olduğunda yeniden düzenleme yapabileceğiniz" ile karşı çıkacağımı söyledi.
Son zamanlarda duyduğum başka bir argüman, kaynak plakasının bazen kodda gezinmenize yardımcı olabileceğidir. Tartıştığımız örnek tonlarca kazan plakası eşleme kodunu kaldırdığımız ve onu AutoMapper ile değiştirdiğimiz yerdi. Şimdi, her şey konvansiyona dayalı olduğu için, IDE'ye "Bu özellik nerede ayarlandı" diyemez ve bilmesini beklemezsiniz.
İnsanların IoC kapları hakkında benzer şeyler tartıştığını gördüm.
Onlarla hemfikir olduğumu söylememek, ama yine de bu adil bir argüman.