Jika Anda memiliki semacam aplikasi dan Anda ingin pengguna Anda dapat menulis plugin untuk itu, bagaimana seharusnya aplikasi tersebut dirancang?
Apa yang harus Anda perhitungkan, pola desain apa untuk ini, dll?
design
plugins
extensibility
pengguna9238
sumber
sumber
Jawaban:
Ini agak tergantung pada platform Anda tetapi beberapa hal umum yang perlu diingat
Versi Apa yang terjadi jika Anda memperbarui aplikasi Anda, apakah semua plugin lama menjadi usang (masalah firefox)
Isolasi Dapatkah plugin melakukan apa pun yang mereka inginkan? Apakah Anda selalu mempercayai mereka? Atau apakah Anda perlu menjalankannya di semacam kotak pasir dan meminta izin.
Pembaruan Bagaimana Anda menangani pembaruan plugin?
Keamanan Bagaimana Anda memastikan pembuat plugin, mencegah spoofing, atau pengguna diperdaya untuk memasang kode jahat. Biasanya diselesaikan dengan semacam penandatanganan kode
Serialisasi sering ketika Anda menggunakan isolasi dari beberapa jenis Anda perlu membuat serial informasi antara berbagai utas atau proses. Bagaimana Anda melakukannya dengan sangat efisien?
Extensibility Aspek apa yang perlu Anda perluas? Bagaimana Anda memaksimalkan potensi plugin tanpa API menjadi berat.
Jika Anda menargetkan pengembang pihak ketiga untuk plugin, saya akan mengatakan hal yang paling penting (dari pengalaman saya) adalah melihat api dan kelas plugin sama sekali berbeda dari aplikasi lainnya, dan membuatnya mudah untuk dikembangkan untuk mungkin. Sangat mudah untuk arsitektur dari aplikasi utama untuk "berdarah" ke dalam plugin sehingga pembuat plugin harus belajar lebih banyak dari yang seharusnya. Buat mudah bagi mereka, pikirkan seperti apa antarmuka dan pengalaman yang Anda inginkan sebagai pembuat plugin.
Pola pikir yang baik lainnya adalah jangan berpikir seperti "Plugin akan melakukan semua hal ini (dalam kode) tetapi," plugin perlu memberikan informasi ini ". Dengan cara itu aplikasi dapat mengkonsumsi informasi yang diperlukan dan melakukan pemrosesan aktual yang akan menyederhanakan plugin.
Juga secara umum, setiap kali Anda dapat menggunakan pendekatan deskriptif (metadata, seperti xml) daripada kode Anda memiliki keuntungan besar karena metadata lebih mudah untuk diangkut, versi, disebarkan, aman dan dapat lebih mudah dikonfigurasi oleh pihak ketiga
sumber
Saya menulis artikel Proyek Kode ini tentang menggunakan MEF untuk ekstensibilitas dalam .NET. Ini pengantar yang bagus.
Ada kerangka kerja ekstensibilitas lain untuk .NET, seperti Arsitektur Add-in SharpDevelop , Mono.Addins , dan System.AddIn .
Untuk Java, ada Eclipse Plug-in Architecture .
Pola umumnya adalah ini:
Dalam praktiknya banyak berbagi dengan Injeksi Ketergantungan dan Pola Strategi.
sumber
Anda hanya perlu menyediakan antarmuka untuk plugin.
Itu harus mengandung setidaknya Activate-Methode (sebuah titik masuk), tetapi Anda juga akan menginginkan hal-hal seperti Inisialisasi dll.
Dan harus ada kemungkinan untuk berkomunikasi dengan aplikasi host dengan cara yang mirip registri, misalnya untuk mendaftarkan item menu. Jadi pendaftar untuk hal-hal yang dapat diubah / diperpanjang untuk plugin harus disediakan.
Juga, harus ada beberapa penyimpanan yang dapat diakses untuk data dan objek aplikasi host, sehingga plugin dapat memanggil rutinitasnya. Ini dapat dengan mudah dilakukan dengan menggunakan DI-Container seperti Unity dan membiarkan plugin mengaksesnya, sehingga mereka dapat menyelesaikan layanan yang mereka butuhkan.
Agregator Acara mungkin merupakan ide yang bagus juga, jadi plugin dapat membuang acara dan bereaksi terhadap peristiwa dari plugin lain dan aplikasi host dengan cara yang dipisahkan. Anda pasti menginginkannya!
sumber