Dapat digunakan kembali adalah fitur desain perangkat lunak yang baik .
Apakah penggunaan kembali gloss yang dapat diterima ("notasi singkat tentang arti") untuk desain perangkat lunak yang baik? Mengapa?
Dapat digunakan kembali adalah fitur desain perangkat lunak yang baik .
Apakah penggunaan kembali gloss yang dapat diterima ("notasi singkat tentang arti") untuk desain perangkat lunak yang baik? Mengapa?
Jawaban:
Penggunaan kembali adalah indikator desain yang baik. Ini menunjukkan bahwa kopling sistem cukup longgar dan kohesi unit tertentu cukup tinggi untuk memfasilitasi penggunaan kembali tanpa mengalami masalah ketergantungan atau harus menulis ulang sebagian besar kode.
Dapat digunakan kembali sebagian besar adalah ilusi. Sangat tidak mungkin untuk mengukur "reusability" dari suatu unit tanpa mengetahui sebelumnya di mana atau bagaimana itu akan digunakan. Banyak pengembang akan mencoba mendesain komponen yang "dapat digunakan kembali" dan seringkali mengetahui kemudian bahwa aspek-aspek spesifik yang mereka coba jadikan "fleksibel" adalah yang sebenarnya tidak perlu.
Saya akan menggunakan "gloss" berbeda: Testability.
Sekarang saya bukan penganjur TDD, saya juga tidak merasa perlu untuk menguji sesuatu dan segalanya. Tetapi tes menulis untuk suatu komponen akan memberi Anda ide yang sangat baik tentang sifat kopling / kohesi, dan sangat cepat. Jika itu tergantung pada abstraksi, maka itu adalah kopling longgar; Anda akan merasa mudah untuk mengejek dependensi dan itu menunjukkan desain yang bagus. Jika ia memiliki tujuan yang jelas (lihat juga Prinsip Tanggung Jawab Tunggal ) maka perilakunya akan relatif intuitif, Anda akan mudah menemukan apa yang harus diuji, yang sekali lagi, menyarankan desain yang baik.
Tentu saja, itu tidak menjamin desain yang baik; implementasi aktual atau bahkan seluruh arsitektur mungkin sepenuhnya tidak pantas untuk tujuan yang dinyatakan. Tapi setidaknya itu memberitahu Anda bahwa Anda tidak bekerja dengan kode spageti atau Obyek Tuhan.
Tolong, jangan mencoba membuat tebakan liar tentang "reusability" komponen, terutama untuk tidak digunakan sebagai bukti "desain yang baik". Itu adalah sesuatu yang Anda hanya dapat membangun di belakang, setelah itu benar-benar digunakan kembali, dan pada saat itu desain mungkin telah berubah secara signifikan.
Tidak.
Dapat digunakan kembali adalah fitur yang baik untuk dimiliki, karena dapat mempercepat pengembangan di masa depan. (Meskipun dalam praktiknya sangat sedikit organisasi yang melihat perkembangan di masa depan dipercepat hampir sebanyak yang mereka harapkan.) Namun, setiap perangkat lunak yang signifikan memiliki bagian-bagian yang spesifik untuk aplikasi itu. Dan lebih jauh lagi ketika orang tanpa pengalaman domain mencoba untuk menulis perangkat lunak yang dapat digunakan kembali, mereka biasanya mengaburkan bagian itu dan mengurangi kinerja tanpa benar-benar berhasil membuatnya dapat digunakan kembali.
Oleh karena itu desain yang baik adalah modular, dan hanya dapat digunakan kembali di mana Anda dapat melihat bahwa karya tersebut dapat digunakan kembali, dan di mana Anda memiliki keahlian untuk benar-benar mencapai usabilitas. Di tempat lain, Anda harus berusaha membersihkan barang-barang tetapi jangan khawatir tentang usabilitas ulang. (Kecuali di belakang kepala Anda di mana Anda membuat catatan sehingga pada beberapa sistem di masa depan Anda akan memiliki ide bagaimana membuat itu dapat digunakan kembali.)
Saya percaya (dan ini adalah kepercayaan pribadi saya) bahwa hubungan antara penggunaan kembali dan desain yang baik tidak bersifat refleksif, jadi jawaban dasarnya dan sederhana adalah tidak . Jika Anda tertarik pada beberapa panduan desain yang baik, periksa ini artikel wikipedia.
Desain perangkat lunak yang baik harus dapat digunakan kembali, setidaknya di beberapa bagian inti, saya pikir sangat sedikit orang yang benar-benar menggunakan kembali kode sumber, karena fakta bahwa sangat rumit untuk merancang inti sistem untuk dapat digunakan kembali pada banyak konteks yang berbeda (Dan saya mengatakan ini karena pengalaman)
Pertimbangkan kelas dengan sejumlah besar tanggung jawab (alias gumpalan) yang melakukan semua tugas yang Anda butuhkan dengan baik tetapi tanpa pertimbangan desain sama sekali, mungkin Anda pernah melihat kasusnya. Kebanyakan orang dengan kelas seperti itu akan menggunakannya berulang kali dan saya pikir kita harus setuju bahwa itu adalah penggunaan ulang, penggunaan kembali tanpa desain.
Saya harap saya tidak terlalu banyak mengacaukan penjelasan saya
Saya pikir indikator yang lebih baik dari desain yang baik adalah kepatuhan terhadap ide-ide mendasar seperti prinsip tanggung jawab tunggal dan menjaga kohesi setiap komponen. Dengan menggunakan abstraksi dengan antarmuka yang bersih dan ringkas dan menjaga kepatuhan dengan Kepala Substitusi Liskov, kami mendorong penggunaan kembali tanpa mencoba memprediksi apa yang akan dan tidak akan digunakan kembali.
Berpegang teguh pada prinsip-prinsip desain dasar ini membuat kode lebih mudah untuk diuji dan lebih mudah untuk digunakan kembali.
Desain yang baik == desain yang baik, dapat digunakan kembali adalah produk sampingan.
Dapat digunakan kembali sering kali merupakan tujuan desain implisit. Jika Anda dapat membuat komponen, atau seluruh desain, sedemikian rupa sehingga dapat digunakan kembali nanti, tampak jelas bahwa Anda harus melakukan itu. Apa yang tidak selalu jelas adalah bahwa dibutuhkan banyak waktu dan usaha (dan uang) untuk membuat sesuatu dapat digunakan kembali, dan oleh karena itu manfaat penggunaan kembali harus ditimbang dengan biayanya.
Desain yang dapat digunakan kembali yang harganya dua kali lebih banyak dan / atau membutuhkan waktu dua kali lebih lama untuk membangun daripada apa yang dibutuhkan pelanggan bukanlah desain yang baik dari perspektif pelanggan, terutama jika pelanggan tidak membutuhkan usabilitas ulang.
Ada sejumlah atribut serupa yang sering dianggap sebagai tujuan desain implisit karena tampaknya jelas bagus:
meminimalkan biaya
meminimalkan waktu pengembangan
meminimalkan kompleksitas
memaksimalkan keandalan
Semua hal ini secara objektif baik, tetapi mungkin tidak selalu penting bagi klien tertentu pada waktu tertentu, jadi penting untuk sepenuhnya memahami apa yang dibutuhkan pelanggan Anda (bahkan jika pelanggan itu hanya bos Anda). Ada sejumlah aforisme yang dimaksudkan untuk mengingatkan kita akan fakta ini (mis. "Selesai lebih baik daripada sempurna" dan "Bagus, murah, cepat: pilih dua"), tetapi masih mudah terjebak dalam perangkap mencoba membuat perangkat lunak yang hebat dalam segala hal padahal sebenarnya hebat dalam segala hal tidak selalu dibutuhkan.
Untuk sampai ke pertanyaan judul, maka: Tidak , dapat digunakan kembali tidak identik dengan desain yang baik. Dapat digunakan kembali dapat menjadi komponen yang berguna dari desain yang baik tertentu, tetapi hanya jika diperlukan.
Belum tentu. Jika Anda membuat sesuatu yang dapat digunakan kembali yang jelas tidak akan digunakan kembali maka itu desain yang buruk.
Misalnya, jika Anda menulis file yang penuh dengan data yang unik untuk perusahaan Anda dan data itu akan diimpor sekali ke tempat lain, mengapa repot-repot membuatnya dapat digunakan kembali?
Yang mengatakan, jika kerangka kerja Anda belum memilikinya, kode untuk menulis ke file mungkin perlu digunakan kembali. Itu akan menjadi desain yang bagus.
Saya akan mengatakan tidak, sebagian besar karena hanya menjelaskan sebagian kecil kode. Saya telah menemukan bahwa di mana kegunaan yang paling penting adalah di bagian paling inti dan di tepi luar wilayah utilitas, tidak begitu banyak di antaranya. Saya akan memberikan beberapa contoh hal-hal yang menurut saya dapat digunakan kembali adalah metrik desain kualitas yang berguna.
Barang inti
Barang Utilitas
Untuk hal-hal CRUD yang mengambil 70-80% dari sebagian besar aplikasi, saya hanya tidak berpikir usabilitas adalah metrik yang berharga sama sekali.