Apakah Anda mulai menulis kelas GUI dulu atau mundur?


8

Saya ingin menulis program Java pertama saya, misalnya Buku telepon, dan saya ingin tahu apa yang harus dilakukan terlebih dahulu. Pertanyaan saya adalah apakah saya harus menulis kelas GUI terlebih dahulu atau memanfaatkan kelas terlebih dahulu? Saya adalah pengembang basis data dan ingin mengetahui praktik terbaik dalam membangun program.


1
Ini subjektif. Saya suka campuran dari atas / dari bawah. Saya menyebut pendekatan kacau saya 'gesit'. Saya mulai dengan mock-up GUI cepat hanya untuk melihat seperti apa rasanya, dan kemudian beralih ke campuran db / plumming. Saya tidak suka menyelesaikan satu bagian sama sekali secara terpisah. Saya suka bermain dengannya, melihat suara apa yang dihasilkannya saat itu berjalan dan bagaimana membuatnya lebih baik, apa yang ditambahkan dan apa yang harus dikeluarkan. Saya mulai dengan GUI pertama karena saya percaya bahwa kegunaan pada akhirnya paling penting bagi pengguna, bukan 20 ms tambahan. Lihat saja popularitas iPhone.
Ayub

2
@ Job. Pertanyaan subjektif semacam ini secara teoritis harus menjadi jenis yang baik. Idealnya kita akan melihat beberapa jawaban yang beralasan dan termotivasi dengan baik dijelaskan secara cukup rinci untuk dipilih OP. Sepertinya komentar Anda akan menjadi dasar yang baik untuk salah satu jawaban itu. :)
Adam Lear

Jawaban:


7

Secara teori, setidaknya ada lima pendekatan yang mungkin.

Perintahkan ke bawah:

Mulai dengan UI mock-shot atau prototipe kertas. Ubah mereka menjadi dialog nyata, dan mulai dari penangan tombol dan kontrol lainnya turun melalui logika dan ke database.

Bawah ke Atas:

Mulai dengan struktur data (mungkin skema basis data). Kemudian tambahkan logika (memodelkan proses dunia nyata); akhirnya, UI Anda hanyalah sebuah antarmuka untuk memicu logika dan menampilkan hasilnya.

Logika dulu:

Mulailah dengan logika program, implementasi akses data, dan UI yang belum sempurna sesuai kebutuhan. Kemudian memformalkan dan mengeraskan struktur data, dan akhirnya menyempurnakan UI dengan benar.

Bertemu di tengah:

Mulailah dengan skema database dan UI, dan secara bersamaan bekerja menuju titik di mana mereka bertemu. Dengan pendekatan ini, logika menjadi yang terakhir.

Ekspansi horisontal:

Mulailah dengan mengidentifikasi jumlah minimum absolut fungsionalitas yang akan melakukan sesuatu yang menarik, dan terapkan seluruh tumpukan (struktur data, logika, dan UI) untuk bagian ini. Itu bisa saja siklus CRUD dasar dengan dialog edit sederhana untuk hanya satu entitas. Kemudian mulai menambahkan lebih banyak fitur, menerapkan seluruh tumpukan untuk setiap fitur (karenanya 'horisontal').

Masing-masing memiliki pro dan kontra.

Top-down memberi Anda sesuatu yang terlihat di awal proses, dan memungkinkan Anda untuk memeriksa desain fungsional Anda dengan para pemangku kepentingan - bidikan tiruan sering memberi tahu pengguna lebih banyak tentang desain daripada diagram alur atau dinding teks.

Bottom-up memberi Anda kesempatan untuk merancang skema basis data yang kuat sebelum Anda berkomitmen untuk apa pun; karena skema basis data sangat sulit untuk dimodifikasi setelah dirilis, Anda ingin mendapatkan bagian ini dengan benar - dampak memodifikasi UI jauh lebih kecil dan menghasilkan lebih sedikit dan lebih sedikit bug yang lebih parah.

Logika-pertama berarti Anda dapat menguji logika sebelum menghabiskan waktu yang serius pada database dan presentasi, yang sangat menarik jika logika Anda akan menjadi sangat kompleks.

Meet-in-the-middle menggabungkan keunggulan bottom-up dan top-down, tetapi Anda harus melompat-lompat di antara dua tugas, dan Anda berisiko berakhir dengan logika yang lebih kompleks daripada yang diperlukan karena kedua ujung Anda tidak bertemu secara alami.

Ekspansi horisontal berjalan dengan baik dengan alur kerja yang berulang, dan memiliki keuntungan tambahan bahwa, jika Anda memprioritaskan dengan baik, Anda akan memiliki aplikasi yang berfungsi pada waktu tertentu, jadi jika Anda tidak membuat tenggat waktu, Anda akan memiliki versi yang memiliki lebih sedikit fitur, tetapi masih berfungsi penuh, berbeda dengan versi yang memiliki database lengkap, tetapi tidak ada UI sama sekali.

Jadi yang mana yang Anda pilih tergantung pada gaya pribadi Anda, dan pada keadaan.


6

Jika Anda seorang pengembang basis data, saya pikir Anda harus mulai dengan model data dan membuat lapisan abstraksi yang baik sehingga mudah untuk mendefinisikan antarmuka pengguna Anda (baik itu GUI atau tidak).


6

Secara pribadi, saya akan menganalisis kekhawatiran pengguna dan pergi dari sana. Idealnya, aspek aplikasi yang membutuhkan paling banyak pekerjaan harus dimulai terlebih dahulu.

Dalam skenario ini, saya akan fokus pada tiruan UI sebagai fokus utama. Pelanggan telah menyatakan keprihatinannya atas dukungan kelompok pengguna akhir yang beragam, terutama mereka yang memiliki hambatan visual, dan mendistribusikan sistem melintasi garis budaya. Dengan demikian, walaupun memiliki sistem yang fungsional dan stabil akan sangat penting, pentingnya memiliki antarmuka yang akan memungkinkan pengguna untuk dengan mudah menyelesaikan pekerjaan menjadi preseden.

Skenario ini akan membuat saya fokus pada logika domain. Pelanggan telah meminta sistem dengan interaksi bisnis yang kompleks. Ini akan menyimpan sejumlah besar struktur data yang kompleks. Dengan demikian pekerjaan awal menemukan dan menerapkan logika bisnis dengan penyimpanan sumber data akan mengarah pada proyek yang sukses.

Jika sistem adalah proyek pribadi, maka fokuskan pada apa yang ingin Anda pelajari dari proyek tersebut. Jika saya mencoba teknologi baru, saya mencoba untuk fokus pada lonjakan kecil dengannya dan mengisolasi teknologi itu sendiri sehingga saya bisa lebih memahami cara kerjanya. Namun proyek pribadi yang melewati semua tahapan akan memiliki manfaat lebih baik mempersiapkan Anda untuk proyek "nyata". Dalam hal ini, saya akan menguraikan beberapa tujuan utama dan menggunakannya sebagai batu loncatan. Jika aplikasi buku telepon ini adalah proyek pribadi Anda, saya sarankan bekerja melalui UI terlebih dahulu. Sebagai pengembang basis data, saya berasumsi bahwa Anda tahu cara menghubungkan database ke logika domain dan kira-kira cara menulis logika domain, tetapi belum banyak menjelajahi teknologi UI; dengan demikian bekerja pada UI akan menguntungkan pembelajaran Anda lebih dari mulai dari sumber data atau logika domain.


Bisakah Anda jelaskan secara singkat apa itu logika domain?
Иван Бишевац

2
Logika domain identik dengan logika bisnis. Ini berisi semua informasi tentang bagaimana bagian-bagian data yang berbeda berinteraksi satu sama lain dan bagaimana menjaga integritasnya. Pikirkan batasan kunci asing dalam database; logika domain akan, sebagian, memastikan bahwa tidak ada data yang dimasukkan ke dalam basis data yang melanggar batasan ini. Selain itu, ini berisi algoritma apa pun yang Anda gunakan untuk memecahkan masalah. Misalnya, Google maps melakukan perhitungan pada jalur tercepat antara dua alamat, ini akan diterapkan dalam logika domain.
Jonathan

5

Mulailah dengan bagian dari proyek yang menurut Anda paling menarik. Jika Anda mulai dengan bagian yang tidak Anda sukai, Anda mungkin berhenti sebelum Anda membuat kemajuan. Di mana Anda memulai sebagian besar adalah masalah preferensi sehingga Anda mungkin juga memilih apa yang paling ingin Anda kerjakan.


3

Mulailah dengan domain atau apa yang Anda sebut 'kelas util'. Uji secara independen dari implementasi UI Anda. Dengan begitu Anda mendapatkan pemahaman yang lebih baik tentang bagaimana aplikasi Anda berperilaku (atau seharusnya berperilaku), bagaimana logika dimainkan terlepas dari kerangka UI, MVC atau yang lainnya, alat, gaya yang Anda rencanakan untuk digunakan pada akhirnya.

Mengikat diri Anda ke implementasi UI tertentu biasanya merupakan ide yang buruk. Saya tidak mengatakan bahwa Anda tidak harus mempertimbangkannya di muka. Saya mengatakan bahwa aplikasi Anda tidak harus bergantung padanya. UI cenderung untuk mengubah BANYAK selama proyek dan jika domain Anda terikat dengannya maka Anda akan banyak mengubah domain Anda juga.


2
Saya kira Anda mengasumsikan sistem (banyak pria-bulan) agak besar di sini.
Ayub

Setiap proyek saya tidak berencana untuk membuang dalam sebulan, jadi ya.
Jonn

3

Hampir setiap orang akan memiliki metode berbeda untuk mengembangkan yang sesuai dengan gaya mereka. Misalnya, satu orang mungkin menemukan bahwa lebih mudah untuk merancang GUI mereka jika mereka telah mendefinisikan arsitektur dan penyimpanan data yang mendasarinya. Namun orang lain mungkin menemukan bahwa bermain-main dengan GUI dan mendapatkan konsep awal dapat membantu mereka mengatur sistem penyimpanan mereka dengan lebih baik dan mengkodekan program mereka dengan cara yang lebih terorganisir. Tugas sebelum Anda adalah menemukan metode mana (atau mungkin beberapa hibrida dari keduanya) yang paling cocok untuk Anda. Bagi saya, saya lebih suka melakukan mockup awal dari apa yang saya pikir akan terlihat seperti GUI, kemudian mulai bekerja pada mur dan baut aplikasi. Setelah saya selesai melakukannya, saya biasanya kembali dan melakukan perubahan pada GUI sesuai kebutuhan.


2

Ini adalah proyek yang cukup mudah di mana saya akan mengatakan itu tidak penting. Pada banyak proyek, meskipun tidak akan segera jelas bagaimana Anda ingin GUI terlihat dan beroperasi, dan begitu Anda membuatnya, seseorang mungkin meminta Anda untuk mengubahnya. Adalah baik untuk membuat maket cepat dari GUI sehingga Anda atau siapa pun yang bertanggung jawab dapat mengambil keputusan konkret tentang seperti apa bentuknya dan kemudian ini akan membantu Anda melihat beberapa bagian korektif dari data yang Anda perlukan untuk melacaknya. Anda mungkin tidak memperhatikan jika Anda mulai dengan desain data.

Lebih penting lagi, Anda TIDAK ingin desain data Anda mendorong antarmuka pengguna Anda. Secara relatif, saya percaya memperbaiki implementasi GUI yang buruk jauh lebih mudah daripada memperbaiki implementasi data yang buruk. Jadi saya pasti memilih untuk memulai dengan GUI.

Dan saya lebih dari seorang pria database sendiri, hanya fyi.

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.