Mari kita mulai dengan sebuah contoh.
Katakanlah, saya memiliki metode yang disebut exportyang sangat bergantung pada skema DB. Dan dengan "sangat bergantung" Maksudku, saya tahu bahwa menambahkan kolom baru ke tabel tertentu sering (sangat sering) mengarah ke exportperubahan metode yang sesuai (biasanya Anda harus menambahkan bidang baru ke data ekspor juga).
Pemrogram sering lupa untuk mengubah exportmetode karena tidak terlalu jelas Anda bahkan harus melihat ini. Tujuan saya adalah untuk memaksa programmer secara eksplisit membuat keputusan untuk menentukan apakah dia lupa untuk melihat exportmetode atau hanya tidak ingin menambahkan bidang ke data ekspor. Dan saya sedang mencari solusi desain untuk masalah ini.
Saya punya dua ide, tetapi keduanya memiliki kekurangan.
Pembungkus “Baca semua” yang cerdas
Saya bisa membuat pembungkus pintar yang memastikan semua data dibaca secara eksplisit.
Sesuatu seperti ini:
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
Jadi, checkertegaskan jika table_rowberisi bidang lain yang tidak dibaca. Tetapi semua hal ini terlihat agak berat dan (mungkin) mempengaruhi kinerja.
“Periksa bahwa metode” unittest
Saya hanya bisa membuat unittest yang mengingat skema tabel terakhir dan gagal setiap kali tabel diubah. Dalam hal ini programmer akan melihat sesuatu seperti "jangan lupa untuk memeriksa exportmetodenya". Untuk menyembunyikan programer peringatan akan (atau tidak akan - itu masalah) memeriksa exportdan secara manual (itu masalah lain) memperbaiki tes dengan menambahkan bidang baru ke dalamnya.
Saya punya beberapa ide lain tetapi terlalu sulit untuk diimplementasikan atau terlalu sulit untuk dipahami (dan saya tidak ingin proyek menjadi teka-teki).
Masalah di atas hanyalah contoh dari kelas masalah yang lebih luas yang saya temui dari waktu ke waktu. Saya ingin mengikat beberapa potongan kode dan / atau infrastruktur sehingga mengubah salah satu dari mereka segera memberitahu programmer untuk memeriksa yang lain. Biasanya Anda memiliki beberapa alat sederhana seperti mengekstraksi logika umum atau menulis unittest yang andal, tetapi saya sedang mencari alat untuk kasus yang lebih kompleks: mungkin beberapa pola desain yang sekarang saya sadari.
exportmemiliki semua yang Anda butuhkan secara realistis?
exportberdasarkan Skema?