Saya punya beberapa produk multi-penyewa berbasis web besar sekarang, dan segera saya bisa melihat bahwa akan ada banyak penyesuaian yang bersifat spesifik penyewa.
Bidang tambahan di sini atau di sana, mungkin halaman tambahan atau beberapa logika tambahan di tengah alur kerja - hal semacam itu.
Beberapa penyesuaian ini dapat digulirkan ke produk inti, dan itu hebat. Beberapa dari mereka sangat spesifik dan akan menghalangi orang lain.
Saya memiliki beberapa ide dalam pikiran untuk mengelola ini, tetapi tidak satu pun dari mereka yang terlihat bagus. Solusi yang jelas adalah memperkenalkan satu ton pengaturan tingkat klien, memungkinkan berbagai 'fitur' diaktifkan pada basis per-klien. Kelemahan dari itu, tentu saja, adalah kerumitan besar dan kekacauan. Anda dapat memperkenalkan sejumlah besar pengaturan, dan dari waktu ke waktu berbagai jenis logika (presentasi, bisnis) dapat keluar dari kendali. Lalu ada masalah bidang khusus klien, yang meminta sesuatu yang lebih bersih daripada hanya menambahkan sekelompok bidang nullable ke tabel yang ada.
Jadi apa yang dilakukan orang untuk mengelola ini? Force.com tampaknya menjadi master dari ekstensibilitas; jelas mereka telah membuat platform dari bawah ke atas yang super extensible. Anda dapat menambahkan hampir apa saja dengan UI berbasis web mereka. FogBugz melakukan sesuatu yang serupa di mana mereka menciptakan model plugin yang kuat, kalau dipikir-pikir, mungkin sebenarnya terinspirasi oleh Force. Saya tahu mereka menghabiskan banyak waktu dan uang untuk itu dan jika saya tidak salah maksudnya adalah menggunakannya secara internal untuk pengembangan produk di masa depan.
Kedengarannya seperti hal yang saya bisa tergoda untuk membangun tetapi mungkin tidak seharusnya. :)
Apakah investasi besar dalam arsitektur pluggable satu-satunya cara untuk pergi? Bagaimana Anda mengelola masalah ini, dan hasil seperti apa yang Anda lihat?
EDIT: Tampaknya FogBugz menangani masalah dengan membangun platform yang cukup kuat dan kemudian menggunakannya untuk menyatukan layar mereka. Untuk memperluasnya, Anda membuat kelas yang berisi DLL yang mengimplementasikan antarmuka seperti ISearchScreenGridColumn, dan itu menjadi modul. Saya yakin itu sangat mahal untuk membangun mengingat bahwa mereka memiliki banyak pengembang dan mereka bekerja selama berbulan-bulan, ditambah luas permukaan mereka mungkin 5% dari ukuran aplikasi saya.
Saat ini saya serius bertanya-tanya apakah Force.com adalah cara yang tepat untuk menangani ini. Dan saya adalah pria ASP.Net inti yang keras, jadi ini adalah posisi yang aneh untuk menemukan diri saya.