Apakah bermanfaat membangun aplikasi yang dimulai dengan GUI?

17

Tren dalam desain dan pengembangan aplikasi tampaknya dimulai dengan "nyali": domain, lalu akses data, lalu infrastruktur, dll. GUI tampaknya biasanya datang kemudian dalam proses. Saya ingin tahu apakah akan pernah berguna untuk membangun GUI terlebih dahulu ...

Alasan saya adalah bahwa dengan membangun setidaknya GUI prototipe, Anda mendapatkan ide yang lebih baik tentang apa yang perlu terjadi di balik layar, dan berada dalam posisi yang lebih baik untuk mulai bekerja pada domain dan kode pendukung.

Saya dapat melihat masalah dengan praktik ini karena jika kode pendukung belum ditulis, tidak akan ada banyak hal yang bisa dilakukan oleh lapisan GUI. Mungkin membangun objek tiruan atau kelas sekali pakai (agak seperti dilakukan dalam pengujian unit) akan memberikan cukup dasar untuk membangun GUI pada awalnya.

Mungkinkah ini ide yang layak untuk proyek nyata? Mungkin kita bisa menambahkan GDD (GUI Driven Development) ke akronim stabil ...

Grant Palin
sumber
4
Ini adalah Pengembangan Aplikasi Cepat.
James Love
Apakah berguna untuk menulis GUI? Kecuali untuk aplikasi seluler, aplikasi web atau aplikasi apa pun yang menampilkan gambar, saya tidak melihat kebutuhan untuk itu.
sayap kanan
kemungkinan duplikat dari Code First vs. Database First
gnat

Jawaban:

27

Membangun prototipe GUI cepat adalah ide yang bagus, dan saya telah mendengarnya digunakan di banyak proyek. Umpan balik awal memang berharga. Namun, ia memiliki bahaya:

  • sangat menggoda (bagi manajer / pengguna) untuk menggunakan kode prototipe lebih lanjut dan membangun aplikasi akhir di atasnya, yang dapat memiliki konsekuensi jangka panjang yang sangat buruk (ini sebenarnya terjadi di salah satu proyek yang telah saya kerjakan, dan itu menghasilkan produk "berfungsi" dengan arsitektur yang tidak ada dan banyak sakit kepala pemeliharaan untuk kami)
  • untuk pengguna biasa, GUI adalah aplikasinya . Jadi begitu mereka melihat GUI yang terlihat bagus, mereka cenderung percaya sebagian besar pekerjaan yang sebenarnya dilakukan, sehingga mereka mungkin sangat marah dengan "pekerjaan kecil yang tersisa" yang berlarut-larut begitu lama: - /

Mengurangi risiko-risiko ini membutuhkan diskusi aktif dan kemungkinan edukasi pengguna dan / atau manajer Anda.

Péter Török
sumber
1
Programmer Pragmatis mencakup bagian prototyping, dan ya, Anda sepenuhnya benar. Prototipe adalah kode sekali pakai;)
Oscar Mederos
6
"Untuk pengguna rata-rata, GUI adalah aplikasi". Saya membenarkan ini 100 kali untuk pengamatan itu saja.
PSU
@Scar, terima kasih untuk referensi, saya hampir lupa mereka membahas ini. Dianjurkan membaca memang.
Péter Török
@ user13645, saya tidak mengklaim itu milik saya - sebenarnya saya baru saja menambahkan tautan ke posting blog asli oleh Joel saat Anda menulis komentar Anda :-)
Péter Török
2
itu sebabnya alat prototipe GUI seperti balsamiq.com muncul. Anda dapat menunjukkan bagaimana tampilan GUI dan mendapatkan umpan balik awal dari pelanggan. Di sisi lain, GUI yang dibuat oleh alat memiliki seni yang sama sekali berbeda (sedikit seperti digambar dengan tangan) sehingga pelanggan secara langsung memahami bahwa ini bukan tampilan akhir dari produk. Dan itu tidak dapat digunakan sebagai kode awal untuk produk - sama seperti desain.
Tobias Langner
5

Masalah yang saya lihat dengan hal itu adalah bahwa tujuannya tampaknya benar-benar terbelakang.

"Alasan saya adalah bahwa dengan membangun setidaknya GUI prototipe, Anda mendapatkan ide yang lebih baik tentang apa yang perlu terjadi di balik layar, dan berada dalam posisi yang lebih baik untuk mulai bekerja pada domain dan kode pendukung."

Menurut saya, ini adalah cara yang salah untuk melihat lapisan bisnis dan cara HEBAT untuk menemukan desain yang buruk dan tidak dapat diperluas. Lapisan data yang dirancang dengan baik untuk mengekspresikan data sepenuhnya dapat digunakan di UI apa pun. Lapisan data yang dirancang untuk bekerja untuk kebutuhan UI tertentu mungkin tidak dapat beradaptasi dengan hal lain, bahkan penambahan fitur kecil ke UI itu.

Pengalaman dengan sistem yang dirancang seperti yang Anda bicarakan menuntun saya untuk menyimpulkan bahwa sebagian besar desain yang menggunakan metodologi ini hanya berumur pendek dan / atau terlalu rumit. Mereka juga cenderung membuat sambungan antara UI dan lapisan data yang seharusnya tidak pernah ada di sana.

Kemandirian lapisan data dan lapisan UI harus didorong. Inilah sebabnya mengapa membangun lapisan data untuk hanya mewakili seluruh data daripada menargetkan UI tertentu hanya berfungsi lebih baik dalam jangka panjang.

Membangun prototipe bisa baik untuk pengumpulan persyaratan dan kesepakatan, tetapi kemudian harus dibuang. Jangan benar-benar menggunakan apa pun dari kode prototipe dalam produk nyata.

Edward Strange
sumber
5

Saya pikir @Péter benar untuk menyarankan agar membangun prototipe GUI adalah ide yang bagus. Saya ingin melengkapi dengan jebakan-jebakan potensial dalam memberikan pengalaman pengguna secara terbelakang, yaitu berfokus pada ontologi, arsitektur dan infrastruktur terlebih dahulu dan pengalaman pengguna langsung terakhir:

  • Pengguna yang Anda dorong ke ujung timeline pengembangan membatalkan perkiraan data Anda dan cara aplikasi Anda digunakan.
  • Desain rumit Anda yang Anda kembangkan secara prematur membuktikan diri sebagai intrik yang bertujuan sendiri yang sangat sedikit atau tidak ada gunanya pada akhirnya.
  • Aplikasi Anda dapat dibawa ke keadaan seperti itu di mana memberikan pengalaman pengguna yang buruk menjadi norma.

Anda melakukan nyali dan kemudian pengguna mendapatkan apa yang keluar dari asumsi Anda, sementara Anda harus peduli dengan apa yang dibutuhkan pengguna dan membangun nyali yang sesuai. Mengapa orang melakukan itu sebaliknya karena presentasi, yang berinteraksi dengan pengguna, dari mana perilaku aplikasi secara alami meluap, adalah bagian paling kompleks dari sistem yang tidak pernah sepenuhnya dieksplorasi atau orang hanya merasa sangat senang tentang diri mereka sendiri dengan membangun hal-hal dalam penghindaran untuk benar-benar harus memikirkan mengapa / apa / untuk siapa mereka membangunnya. Mendirikan struktur besar yang secara struktural sehat adalah permainan anak-anak, membuatnya memuaskan kebutuhan fungsional semua orang (dan estetika) adalah bagian tersulit.

Untuk setiap pengalaman craptastic, aliran yang unik, informasi yang tidak terkumpul, fungsi yang tidak jelas, hal-hal yang keliru, contoh setiap kali Anda memohon untuk bertanya "jenius mana yang muncul dengan itu ?", Terletak sesuatu yang diabaikan, diabaikan atau mengungkapkan pengguna sebagai yang terdepan dalam upaya pengembangan.

Filip Dupanović
sumber
3

Secara umum, model harus dikembangkan sebelum tampilan. Setelah Anda memiliki dasar logis dari aplikasi Anda, Anda dapat membangun satu atau lebih tampilan model itu (misalnya, Anda dapat menampilkan data dalam tabel atau dalam grafik). Biasanya, model lebih penting daripada GUI. Ini terutama berlaku untuk pengembangan usaha di mana GUI biasanya dilakukan dengan cara standar.

Namun, terkadang GUI benar-benar adalah bagian terpenting dari aplikasi. Terkadang Anda ingin melihat data dalam novel dan cara spesifik - dan Anda mengambilnya dari sana, lalu mengembangkan modelnya. Sebagai contoh, CashCurve adalah aplikasi seperti itu di mana intinya ada di GUI, sedangkan model data itu sendiri adalah hal-hal membosankan standar yang dapat dimodelkan siapa pun dalam beberapa menit. (Penafian: Saya tidak berafiliasi dengan CashCurve, hanya pengguna yang sangat puas.)

Ini juga relevan untuk mendesain layanan web atau API lainnya - hanya ada yang dikenal sebagai desain " kontrak-pertama ".

Jadi, untuk semuanya, tidak ada aturan tentang apa yang harus dirancang terlebih dahulu; terkadang model, dan terkadang GUI. Sebagai aturan praktis, saya akan pergi dengan "desain bagian terpenting terlebih dahulu."

Ada peringatan yang harus dipertimbangkan ketika merancang GUI pertama, seperti pengguna yang mungkin akan mengalami kesulitan memahami bahwa aplikasi jauh dari lengkap ketika hanya prototipe GUI yang ada, tetapi jawaban lain telah membahas hal ini dengan cukup baik sehingga saya tidak akan menjelaskan lebih lanjut.

Domchi
sumber
3

Saya pikir ini adalah cara yang sangat baik untuk mendekati desain aplikasi, terutama di lingkungan pengembangan yang gesit. Sebagian besar proyek sukses yang saya kerjakan telah dimulai dengan prototipe yang akhirnya menjadi hal yang nyata.

Anda harus memahami bahwa GUI adalah jendela ke dalam sistem (mis. Database, filesystem, dll). Dalam situasi di mana persyaratan proyek hampir sama kaburnya dengan tumpukan lumpur, maka Anda tidak akan memiliki harapan di neraka dalam mendapatkan solusi yang benar dengan memulai di backend. Hampir selalu, pengembang backend yang bermaksud baik mengembangkan sekelompok API yang tidak memiliki relevansi dengan interaksi pengguna.

Dengan memulai pada GUI, pelanggan mendapatkan ide yang lebih baik tentang apa yang mereka inginkan. Ketika tahap ini berlangsung, pengembangan GUI (menggunakan ejekan dan bertopik) melahirkan model domain. Model domain ini kemudian dapat ditransfer ke backend dan pengembang back end dapat mulai mengembangkan logika ketekunan dan transaksional.

Dan mengapa Anda ingin membuang protoype? Kami tidak berurusan dengan stadion yang dibangun dari korek api. Ubah saja benda sialan itu menjadi sesuatu yang baik.

Olly
sumber
1

Tidak terdengar buruk bagi saya sama sekali jika orang yang melihat GUI memahami bahwa itu hanya sebuah shell dan secara harfiah tombol dan proses tidak berfungsi (melempar NotImplementedException (); baru;);)).

Jika Anda tetap menggunakan arsitektur gaya MVC, saya tidak melihat masalah pemeliharaan atau konstruksi di masa depan karena "Lihat" tidak mendefinisikan hal semacam itu sama sekali. "Pengendali" dan "Model" dapat datang nanti dengan infrastruktur apa pun yang Anda perlukan untuk skalabilitas / kebutuhan desain dll.

Sedangkan untuk manajemen, gambar bagan pai besar dengan 3 bagian, beri label "M", "V", dan "C". Beri V sekitar 20% dan jelaskan sisa pai itu "TBC";).

Martin Blore
sumber
0

Dalam sistem berukuran apa pun, apa yang perlu terjadi di balik layar secara longgar terkait dengan seperti apa tampilan GUI. GUI hanya akan memberi Anda beberapa persyaratan. Sering ada banyak komponen yang tidak memiliki GUI.

Setelah sistem dikembangkan, antarmuka tambahan (termasuk GUI baru) mungkin diperlukan. Memahami dan menerapkan persyaratan bisnis sangat penting agar ini berhasil.

Di mana merancang GUI dan mekanisme Input dan Output lainnya dapat membantu memvalidasi model. Atribut yang tidak pernah di-output, mungkin tidak diperlukan. (Mungkin ada alasan untuk menyimpannya, tetapi kemungkinan besar persyaratan audit atau regulator.)

Seperti yang disebutkan orang lain, setelah Anda memiliki GUI yang berfungsi, banyak klien akan berpikir Anda selesai. Namun, Anda mungkin tidak memiliki infrastruktur di belakangnya. Prototipe kertas mungkin merupakan opsi yang baik untuk memvalidasi tata letak dan konten GUI.

Jangan mengabaikan bahwa Anda mungkin perlu menyesuaikan antarmuka setelah pengembangan. Saya telah mendengar laporan penggantian antarmuka checkout yang gagal untuk proses checkout lima langkah. Antarmuka yang jauh lebih sederhana tidak memberikan pengguna rasa aman yang tepat dan memiliki tingkat penyelesaian yang jauh lebih rendah. Dengarkan Speed ​​Bumps: Bahan Ajaib dalam Pemasaran .

BillThor
sumber