Mari kita mulai dengan sebuah contoh.
Katakanlah, saya memiliki metode yang disebut export
yang sangat bergantung pada skema DB. Dan dengan "sangat bergantung" Maksudku, saya tahu bahwa menambahkan kolom baru ke tabel tertentu sering (sangat sering) mengarah ke export
perubahan metode yang sesuai (biasanya Anda harus menambahkan bidang baru ke data ekspor juga).
Pemrogram sering lupa untuk mengubah export
metode 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 export
metode 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, checker
tegaskan jika table_row
berisi 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 export
metodenya". Untuk menyembunyikan programer peringatan akan (atau tidak akan - itu masalah) memeriksa export
dan 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.
export
memiliki semua yang Anda butuhkan secara realistis?
export
berdasarkan Skema?