Di masa lalu, saya telah menggunakan warisan untuk memungkinkan ekstensi formulir Windows di aplikasi saya. Jika semua formulir saya akan memiliki kontrol umum, karya seni, dan fungsionalitas, saya akan membuat formulir dasar yang menerapkan kontrol dan fungsionalitas umum dan kemudian mengizinkan kontrol lain untuk mewarisi dari formulir dasar itu. Namun, saya mengalami beberapa masalah dengan desain itu.
Kontrol hanya dapat berada dalam satu wadah pada satu waktu, sehingga kontrol statis yang Anda miliki akan menjadi rumit. Sebagai contoh: Misalkan Anda memiliki bentuk dasar yang disebut BaseForm yang berisi TreeView yang Anda buat terproteksi dan statis sehingga semua instance (turunan) lainnya dari kelas ini dapat memodifikasi dan menampilkan TreeView yang sama. Ini tidak akan berfungsi untuk beberapa kelas yang diwarisi dari BaseForm, karena TreeView itu hanya bisa dalam satu wadah pada satu waktu. Kemungkinan akan berada pada bentuk terakhir diinisialisasi. Meskipun setiap instance dapat mengedit kontrol, itu hanya akan ditampilkan dalam satu pada waktu tertentu. Tentu saja, ada jalan keluar, tetapi semuanya jelek. (Ini sepertinya desain yang benar-benar buruk bagiku. Mengapa beberapa kontainer tidak dapat menyimpan pointer ke objek yang sama? Bagaimanapun, itu adalah apa adanya.)
Sebutkan di antara formulir, yaitu, status tombol, teks label, dll., Saya harus menggunakan variabel global untuk dan mengatur ulang status pada Load.
Ini tidak benar-benar didukung oleh desainer Visual Studio dengan sangat baik.
Apakah ada desain yang lebih baik, namun masih mudah dirawat untuk digunakan? Atau apakah pewarisan bentuk masih merupakan pendekatan terbaik?
Pembaruan Saya beralih dari melihat MVC ke MVP ke Pola Pengamat ke Pola Peristiwa. Inilah yang saya pikirkan untuk saat ini, mohon kritik:
Kelas BaseForm saya hanya akan berisi kontrol, dan acara yang terhubung ke kontrol itu. Semua peristiwa yang memerlukan segala jenis logika untuk menanganinya akan segera diteruskan ke kelas BaseFormPresenter. Kelas ini akan menangani data dari UI, melakukan operasi logis apa pun, dan kemudian memperbarui BaseFormModel. Model akan memaparkan acara, yang akan diluncurkan setelah perubahan status, ke kelas Presenter, di mana ia akan berlangganan (atau mengamati). Ketika Presenter menerima pemberitahuan acara, itu akan melakukan logika apa pun, dan kemudian Presenter akan memodifikasi tampilan yang sesuai.
Hanya akan ada satu dari setiap kelas Model dalam memori, tetapi berpotensi ada banyak instance dari BaseForm dan karenanya BaseFormPresenter. Ini akan memecahkan masalah saya menyinkronkan setiap instance dari BaseForm ke model data yang sama.
Pertanyaan:
Lapisan mana yang harus menyimpan hal-hal seperti, tombol terakhir yang ditekan, sehingga saya dapat tetap disorot untuk pengguna (seperti dalam menu CSS) di antara formulir?
Harap kritik desain ini. Terima kasih atas bantuan Anda!