Bir örnekle başlayalım.
Diyelim ki, export
ağırlıklı olarak DB şemasına bağlı olarak adlandırılan bir yöntemim var . Ve “büyük ölçüde bağlıdır” derken, belirli bir tabloya sık sık (çok sık) yeni bir sütun eklemenin karşılık gelen export
yöntem değişikliğine yol açtığını biliyorum (genellikle yeni alanı dışa aktarma verilerine de eklemelisiniz).
Programcılar genellikle export
yöntemi değiştirmeyi unutur, çünkü buna bile bakmanız gerektiği açık değildir. Amacım programcı zorlamak açıkça o bakmak için unuttum olup olmadığını belirlemek için bir karar export
yöntemle ya da sadece ihracat verilerine bir alan eklemek istemiyorum. Ve ben bu problemin tasarım çözümünü arıyorum.
İki fikrim var, ama her ikisinin de kusurları var.
Akıllı "Tümünü oku" sarmalayıcısı
Tüm verilerin açıkça okunmasını sağlayan akıllı sarmalayıcı oluşturabilirim.
Bunun gibi bir şey:
def export():
checker = AllReadChecker.new(table_row)
name = checker.get('name')
surname = checker.get('surname')
checker.ignore('age') # explicitly ignore the "age" field
result = [name, surname] # or whatever
checker.check_now() # check all is read
return result
Bu nedenle, okunmayan başka bir alan içerip içermediğini checker
varsayar table_row
. Ama bütün bunlar ağır görünüyor ve (belki) performansı etkilemektedir.
“ Bu yöntemi kontrol et ” unittest
Sadece son tablo şemasını hatırlayan ve tablo her değiştiğinde başarısız olan birim testi oluşturabilirim. Bu durumda programcı “ export
yöntemi kontrol etmeyi unutma” gibi bir şey görür . Uyarı programlayıcısını gizlemek (veya bu bir sorun değildir) kontrol etmek export
ve manuel olarak (bu başka bir sorun) testi yeni alanlar ekleyerek düzeltir.
Birkaç fikrim daha var, ancak uygulanması çok zordur veya anlaşılması çok zordur (ve projenin bir bulmaca olmasını istemiyorum).
Yukarıdaki sorun, zaman zaman karşılaştığım daha geniş sorun sınıflarına bir örnektir. Bazı kod parçalarını ve / veya altyapıyı bağlamak istiyorum, bu yüzden bunlardan birini değiştirmek programcıyı diğerini kontrol etmesi için hemen uyarır. Genellikle ortak mantığı ayıklamak veya güvenilir bir birim testi yazmak gibi bazı basit araçlarınız vardır, ancak daha karmaşık durumlar için aracı arıyorum: belki de şimdi farkında olduğum bazı tasarım kalıpları.
export
gerçekçi bir şekilde ihtiyacınız olan her şeye sahip olup olmadığını kontrol eden bir test oluşturabilir misiniz?
export
Şemaya dayalı olarak oluşturabilir misiniz ?