Tema berulang dalam karya pengembangan saya adalah penggunaan atau pembuatan arsitektur plug-in in-house. Saya telah melihatnya mendekati banyak cara - file konfigurasi (XML, .conf, dan sebagainya), kerangka kerja pewarisan, informasi basis data, perpustakaan, dan lainnya. Dalam pengalaman saya:
- Basis data bukan tempat yang bagus untuk menyimpan informasi konfigurasi Anda, terutama yang digabungkan dengan data
- Mencoba ini dengan hierarki warisan membutuhkan pengetahuan tentang plug-in yang akan dikodekan, artinya arsitektur plug-in tidak terlalu dinamis
- File konfigurasi berfungsi dengan baik untuk memberikan informasi sederhana, tetapi tidak dapat menangani perilaku yang lebih kompleks
- Perpustakaan tampaknya berfungsi dengan baik, tetapi dependensi satu arah harus dibuat dengan cermat.
Ketika saya berusaha untuk belajar dari berbagai arsitektur yang telah saya kerjakan, saya juga mencari saran untuk komunitas. Bagaimana Anda menerapkan arsitektur plug-in SOLID? Apa kegagalan terburuk Anda (atau kegagalan terburuk yang pernah Anda lihat)? Apa yang akan Anda lakukan jika Anda akan mengimplementasikan arsitektur plug-in baru? SDK atau proyek sumber terbuka apa yang telah Anda kerjakan memiliki contoh terbaik arsitektur yang bagus?
Beberapa contoh yang saya temukan sendiri:
- Modul Perl :: Plugable dan IOC untuk injeksi ketergantungan pada Perl
- Berbagai kerangka kerja Spring (Java, .NET, Python) untuk injeksi ketergantungan.
- Sebuah pertanyaan SO dengan daftar untuk Java (termasuk antarmuka layanan Provider )
- Sebuah pertanyaan SO untuk C ++ menunjuk ke sebuah artikel Dr. Dobbs
- Sebuah pertanyaan SO mengenai ide tertentu plugin untuk ASP.NET MVC
Contoh-contoh ini tampaknya memainkan berbagai kekuatan bahasa. Apakah arsitektur plugin yang baik harus dikaitkan dengan bahasa? Apakah yang terbaik untuk menggunakan alat untuk membuat arsitektur plugin, atau melakukannya pada model berikut sendiri?