Saya ingat belajar VB4 dan menyeret tombol ke formulir, mengklik dua kali pada tombol itu, dan mengetik kode ke event handler yang baru saja diberkati secara ajaib. Berasal dari QBASIC saya sangat senang dengan "V" dalam "VB", desainer visual secara harfiah adalah yang terbaik sejak memotong roti.
Tentu saja Anda bisa melakukan semua itu secara terprogram tetapi keajaiban "V" begitu menarik sehingga Anda tidak bisa menahan tombol itu. Kami didorong untuk mengambil rute itu.
Tapi kemudian beberapa tahun yang lalu saya mulai belajar tentang C # dan kerangka kerja. Net dan terpesona oleh cara semua yang saya tahu saya baru saja keluar dari jendela. Ada banyak keajaiban yang terjadi di VB6 yang sepenuhnya diluncurkan di .net: ambil konstruktor dan InitializeComponents
metode misalnya. Dalam yang terakhir Anda akan menemukan semua contoh kontrol yang Anda seret dari kotak alat, semua acara yang Anda daftarkan dan properti yang Anda atur di perancang.
Dan itu tidak masalah ... kurasa. Hanya saja, saya merasa seperti tidak "memiliki" apa yang terjadi, kode ini yang hanya dapat saya modifikasi melalui perancang mengganggu saya. Setiap kali Anda menyalin tombol yang mengatakan "Oke" dari satu formulir ke yang lain (kadang-kadang bersama dengan saudaranya "Batal"), Anda benar-benar menggandakan kode, dan itu dosa bukan? KERING, jangan ulangi dirimu, kata Paus .
Agama dan aliran pemikiran di samping, dalam semua obyektivitas, bukankah seharusnya kita mengambil bentuk dari bentuk dasar sebagai gantinya, dan apakah tombol "Oke" (dan semua teman-temannya) tinggal di formulir dasar? Sesuatu seperti FormBase
dari mana berasal DialogFormBase
; semua kelas dibuat dalam waktu singkat ... dengan mengetikkan kode. Tombol-tombol dibuat tergantung pada bagaimana kelas di-instanciated (yaitu argumen konstruktor enum menentukan tombol mana yang akan dibuat), kontrol diletakkan di dalam susunan panel split dan panel tata letak aliran, disuntikkan ke dalam bentuk sebagaiContent
yang cocok dengan panel konten utama. Bukankah ini yang ASP.net lakukan dengan halaman master dan placeholder konten? Saya akan mendapatkan formulir ketika saya membutuhkan "halaman master" baru, tetapi "halaman master" baru ini masih berasal dari kelas bentuk dasar sehingga visual konsisten di seluruh aplikasi.
Bagi saya itu lebih banyak menggunakan kembali kode daripada apa pun yang pernah saya lakukan dengan desainer di WinForms, dan itu bahkan tidak sulit, dan kode tidak berantakan dengan metode 200-baris yang saya tidak punya kendali atas, saya bisa letakkan komentar di tempat yang saya suka, mereka tidak akan ditimpa oleh seorang desainer. Saya kira itu hanya masalah pola dan arsitektur, yang membawa saya ke tautan ini: Desain terbaik untuk bentuk Windows yang akan berbagi fungsionalitas umum , di mana saya menyadari saya sangat tepat, kecuali jawaban di sana, menunjukkan dengan tepat apa yang saya lakukan, tapi itu menyarankan terhadap warisan bentuk karena pertimbangan desainer. Itu bagian yang tidak saya dapatkan .karena pertimbangan struktur kode, terutama dalam hal bentuk dan kontrol warisan, yang saya lihat tidak ada alasan untuk menghindari selain itu merusak perancang .
Kita semua tidak bisa hanya malas, jadi bagian apa yang saya lewatkan?
sumber
Jawaban:
Saya akan menentang Anda dengan paradigma yang berbeda: Komposisi nikmat daripada warisan.
Bahkan ketika Anda mulai menulis kode GUI dengan tangan dan menggunakan warisan untuk berbagi perilaku dan visual antar formulir, Anda akan mendapatkan masalah yang sama dengan desain OOP normal. Katakanlah Anda memiliki DialogForm, yang memiliki tombol OK / Batal dan GridForm, yang memiliki kisi. Anda memperoleh semua dialog dari DialogForm dan semua formulir dengan Grid dari GridForm. Dan kemudian Anda mengetahui bahwa Anda menginginkan formulir dengan keduanya. Bagaimana Anda mengatasinya? Jika Anda menggunakan pewarisan formulir, maka tidak ada cara menyelesaikannya. Di sisi lain, jika Anda menggunakan UserControls, maka Anda cukup meletakkan GridControl di formulir Anda dan selesai dengan itu. Dan Anda masih dapat menggunakan perancang dengan UserControls, sehingga Anda tidak perlu membuang waktu untuk menulis kode GUI yang membosankan.
sumber
BottomPanel
dan hosting perilaku Ok / Batal / Terapkan / Tutup yang umum; Panel1 berisi SplitContainer dengan Panel1 diperbaiki (untuk meng-host label "instruksi" umum, atau menu, toolbar, apa pun yang terjadi di atas) dan Panel2 memegang Panel yang dilindungi disebutMainContent
; setiap implementasi aktual memutuskan bagaimana mengisinya. Semua konten dapat disuntikkan ke dalam implementasi dan ya, ini bisa menjadi kontrol pengguna yang dibuat dengan perancang untuk menghemat waktu, poin bagus .. tapi bagaimana dengan formulir itu sendiri?Banyak dari ini terkait dengan tumpukan teknologi pilihan.
WinForms dan WPF mungkin keduanya .NET UI frameworks tetapi sangat bervariasi dalam cara Anda mencapai tujuan akhir. Paradigma tertentu bergerak di antara teknologi baik-baik saja tetapi yang lain tidak dan Anda tidak boleh mencoba dan memaksakan paradigma hanya karena Anda merasa itu ada di setiap kerangka kerja. Ada alasan mengapa MVVM diarahkan pada WPF / SL dan MVC adalah konsep terpisah dalam ASP.NET dari WebForms dan sebagainya. Teknologi tertentu bekerja lebih baik dengan paradigma tertentu.
Ingatlah bahwa kode yang dibuat umumnya harus dihapus dari masalah KERING Anda. Sementara berlaku dalam beberapa kasus, lebih sering tidak harus diabaikan. Konsep KERING tentu harus tetap menjadi fokus di luar lapisan Presentasi Anda tetapi pada lapisan Presentasi dihasilkan kode lebih sering daripada bukan produk sampingan dari kerangka kerja Anda bekerja. Ini bukan untuk mengatakan Anda tidak dapat menerapkan prinsip KERING dalam pendekatan Anda tetapi tetap waspada. Bisakah Anda membuat Formulir dasar dan mewarisi darinya tanpa batas? Iya. Bisakah Anda seret dan jatuhkan komponen pada Formulir baru setiap saat sesuai kebutuhan? Iya. Tetap fokus pada tujuan akhir, menghindari cacat potensial, membuatnya mudah untuk refactor hilir, dan skalabilitas saat bekerja dalam batas-batas tumpukan teknologi pilihan.
sumber
Anda dapat menggunakan warisan dengan menyediakan Anda dengan benar merangkum bidang Anda dan mengisi yang sesuai. Jika Anda ingin menggunakan warisan, saran saya adalah memiliki formulir dasar dan Model yang sesuai untuk formulir itu, dan untuk setiap derivasi diperoleh baik formulir dan Model.
Alternatif yang jauh lebih baik adalah mengelompokkan kontrol terkait menjadi satu atau lebih kontrol UserControl. Anda hanya perlu sedikit logika untuk memasukkan data yang relevan ke dalamnya.
sumber
Saya sepenuhnya setuju dengan Mason Wheeler, walaupun dalam tiga tahun mungkin bahkan dirinya sendiri telah berubah pikiran.
Saya mencoba mencari alternatif untuk bermigrasi dari executable Delphi ke WEB.
Hingga sekarang saya memutuskan sendiri untuk UNIGUI, karena saya masih dapat menggunakan warisan bentuk. Saya ingin Delphi memiliki Mixin seperti Dart, karena akan membuat saya memiliki lebih sedikit leluhur. Tapi saya merasa orang menulis lebih banyak kode dalam MVC daripada dengan Visual Form Inheritance, karena sebagian besar navigasi, panggilan ke aturan validasi dalam datamodule (applyupdates), kriteria penyaringan sql, mencari dataset klien, mencari set data klien, semuanya ditulis dalam 5 mungkin 6 Bentuk leluhur.
Bahkan "Dengan MVC akan lebih mudah bagi Anda untuk meninggalkan Delphi di Fitur" bagi saya jangan bekerja sebagai argumen, karena orang mengundang OOP, semuanya kelas, properti, metode. Jadi yang saya butuhkan adalah seorang penerjemah. Benar-benar tidak dapat menemukan keuntungan, mungkin untuk situs web yang jauh lebih mudah tetapi berubah dalam basis harian.
sumber