Saya tertarik pada apakah pola ActiveRecord, yang dibuat terkenal dari Ruby on Rails, mendorong atau menghambat penggunaan prinsip-prinsip desain SOLID .
Sebagai contoh, menurut saya objek ActiveRecord mengandung logika domain, dan logika kegigihan, yang merupakan pelanggaran Single Responsibility.
object-oriented
ruby-on-rails
nicholaides
sumber
sumber
Jawaban:
Ada beberapa kritik valid pada ActiveRecord. Seperti biasa, Paman Bob menyimpulkannya dengan sempurna :
Wikipedia meringkas kritik dalam masalah testability :
Khusus untuk implementasi Ruby on Rails, Gavin King menulis (penekanan pada tambang):
Juga tentang implementasi Ruby on Rails, John Januszczak menulis (penekanan saya):
Beberapa sumber daya lebih lanjut tentang mengapa ActiveRecord dan ORM umumnya dianggap sebagai anti-pola:
ActiveRecord selalu terasa seperti anti-pola yang sangat berguna , tetapi saya setuju bahwa itu bertentangan dengan SRP dan juga bertentangan dengan prinsip inversi ketergantungan.
sumber
(Saya berasumsi bahwa kelas ActiveRecord diimplementasikan tanpa ada kemungkinan injeksi ketergantungan).
Dari pengalaman pribadi saya dapat mengatakan bahwa pola ActiveRecord menjadi hambatan utama untuk menulis tes unit. Penggabungan lapisan ketekunan dan logika bisnis dalam satu "kelas ActiveRecord" membuat tidak mungkin untuk menulis tes unit (kecuali jika Anda refactor terlebih dahulu). Oleh karena itu, satu-satunya pilihan adalah menulis tes integrasi; dan itu tidak seefektif tes unit. Ini menjadi masalah besar terutama jika Anda mengambil alih proyek dengan banyak kelas ActiveRecord; itu menghasilkan tes integrasi yang sangat rumit yang sulit dipertahankan.
Jadi, ActiveRecord datang cukup banyak terhadap SRP dan membuat beberapa sakit kepala pemeliharaan; tampaknya menghilangkan kekuatan untuk menulis unit-test.
sumber