Saat ini saya sedang mengerjakan proyek yang akan mencapai lebih dari 5.000 baris kode, tetapi saya tidak pernah benar-benar memikirkan desainnya. Metode apa yang harus saya gunakan untuk menyusun dan mengatur kode saya? Kertas dan pena? Diagram UML? Sesuatu yang lain
architecture
uml
Ryan
sumber
sumber
Jawaban:
Anda mungkin mendapatkan banyak pandangan berbeda karena akan ada jawaban. Tapi ini perspektif saya.
Sebagai permulaan, 5000+ baris kode adalah proyek yang sangat kecil. Sekarang, bagaimana Anda merancang proyek yang tumbuh. Pertama, Anda merancang sistem Anda dan bukan kode. Kode sebenarnya sekunder untuk arsitektur. Mulailah dengan mendukung persyaratan minimum saat ini. Masukkan beberapa gambar sederhana dari komponen yang terlibat. Saya pribadi suka UML, tetapi visual apa pun akan bagus. Idealnya, Anda ingin mematuhi praktik desain yang baik di sini (antarmuka, pemisahan masalah, dll).
Setelah Anda mendukung persyaratan minimal dalam desain Anda, buat kode. Sekali lagi, cobalah untuk mematuhi praktik pengkodean yang baik.
Setelah itu, secara iteratif tambahkan lebih banyak fungsionalitas saat persyaratan baru muncul. Idealnya Anda ingin memperbarui desain Anda juga.
Yang penting, berdasarkan pengalaman saya, bukan mendesain sistem Anda untuk mengantisipasi kebutuhan yang tidak ada. Kalau tidak, proyek Anda akan tumbuh sangat cepat dan akan menjadi sangat kompleks dalam waktu singkat. Sekali lagi - patuhi praktik yang baik dan mulai dengan persyaratan saat ini yang konkret.
sumber
Diagram Alir, Diagram Kelas, Use Case Diagram adalah diagram yang harus dimiliki untuk proyek-proyek besar. Cari dan pilih perpustakaan eksternal mana yang Anda butuhkan, dan cari kode sumber terbuka serupa yang dapat Anda gunakan (untuk mempelajari & mengurangi waktu pengembangan).
Saya sarankan Anda untuk membeli papan tulis & beberapa magnet berwarna-warni & Post-It. Ini akan membantu Anda mengidentifikasi tugas Anda.
ps 5000+ baris kode tidak "besar". Perangkat lunak CMS / Forum memiliki lebih dari 5000 baris kode.
sumber
Saya akan membuat diagram paket dan kelas. Dalam diagram paket saya akan tertarik untuk mengelompokkan kelas dan antarmuka secara logis. Saya juga ingin membuat paket-paket internal dll ...
Tetapi pertama-tama Anda harus memikirkan program apa yang harus dilakukan. Anda dapat membuat diagram usecase atau melakukannya secara manual. Saya melakukannya secara manual dengan diagram kelas karena saya lebih suka mendapatkan kode segera dan lebih mudah untuk menukar ke diagram kelas paket nanti. Menggunakan diagram kelas memberi saya java saya. Jika saya tidak suka maka saya mengubahnya secara manual. Kode baru secara otomatis diperbarui ke dalam diagram saya. Saya memiliki representasi visual tingkat tinggi yang diperbarui dari kode saya. Sangat membantu karena walaupun saya kode saya selalu dapat mengambil beberapa menit untuk melihat cara proyek saya berjalan secara grafis. Saya hanya drag dan drop entitas dalam paket yang tepat secara manual untuk mengaturnya. Saya pikir kode saya lebih baik menggunakan paket abstraksi dan diagram kelas yang lebih tinggi.
(sumber: ejb3.org )
beberapa kolega saya mengatakan cara saya bekerja adalah omong kosong .... tapi saya suka :-)
sumber
Pastinya. Saya memiliki "tablet" papan penghapus kering kecil untuk digunakan untuk hal semacam ini, tetapi gunakan apa pun yang Anda sukai. Yang penting adalah Anda bisa dengan mudah menurunkan pikiran dan melihat gambaran besar tentang bagaimana semuanya cocok.
Beberapa orang lebih suka rencana yang lebih formal, seperti diagram UML, tetapi saya merasa bahwa terlalu mudah untuk terjebak dalam pengelolaan mikro seperti apa masing-masing metode. Namun, sekali lagi, gunakan apa pun yang Anda sukai.
EDIT: Anda mungkin juga tertarik dengan pemrograman melek . Idenya adalah bahwa Anda dapat merencanakan semuanya dan secara bertahap menjadi lebih spesifik. Misalnya, Anda dapat mengatakan bahwa program Anda terdiri dari:
Kemudian, Anda dapat memperbaiki ide Anda untuk mengubah teks menjadi gambar. Sehingga mungkin terlihat seperti:
Maka Anda mungkin memperbaiki gagasan memilih warna acak, dan segera Anda hanya menulis kode biasa.
sumber
Bagi saya, aktivitas pengembangan perangkat lunak adalah serangkaian desain yang semakin halus untuk menyelesaikan masalah tertentu. Ketika Anda hanya memiliki ide tingkat tinggi tentang apa yang Anda sedang membangun, desain Anda mungkin sesuatu yang sangat tinggi, seperti "akan ada aplikasi web yang berbicara dengan database SQL dan beberapa layanan web" atau sesuatu seperti itu. Kemudian, saat Anda menelusuri detail setiap bagian, Anda mendapatkan desain yang lebih halus. Bergantung pada kerumitan solusi akan ada lebih banyak atau lebih sedikit iterasi dari upaya desain. Iterasi akhir melibatkan pembuatan kode aktual yang mengimplementasikan level desain yang lebih tinggi.
Bagi saya, perbedaan antara arsitektur dan desain adalah minimal, dan mereka hanya iterasi yang berbeda dari proses yang saya jelaskan di atas. Garis antara keduanya kabur, dan berbeda untuk orang yang berbeda.
Ada seni untuk memutuskan tingkat detail desain yang akan digunakan, untuk bagian mana dari aplikasi, dan pada titik mana dalam siklus hidup proyek. Untuk risiko tinggi, proyek dengan kompleksitas tinggi, Anda mungkin ingin memiliki desain yang sangat rinci sebelum Anda pernah menulis sebaris kode. Untuk proyek yang lebih kecil, Anda dapat melakukan sedikit desain di muka dan hanya mengeluarkan beberapa kode dan kemudian melihat apa yang tidak berhasil dan mendesain ulang area tersebut. Tidak hanya ada satu jawaban tulis di sini. Biasanya ada di antara dua ekstrem itu.
Saya memiliki posting blog yang berbicara tentang beberapa prinsip yang saya gunakan ketika mendekati arsitektur. Mungkin bermanfaat bagi Anda ketika berpikir seperti ini. Beberapa artikel khusus untuk .NET tetapi sebagian besar tidak.
sumber
Saya dulu sering bertanya pada diri sendiri pertanyaan yang sama. Sekarang saya hanya mempraktikkan pengembangan yang digerakkan oleh tes, dan tidak perlu khawatir. Saya tidak "merencanakan" kode sama sekali, kecuali mengikuti standar untuk arsitektur yang dipilih. Ketika saya memulai sebuah proyek, saya memiliki beberapa gagasan tentang apa yang akan dibutuhkan, tetapi ketika pengembangan berlanjut, saya mencoba untuk tetap berpikiran terbuka. Dengan mengikuti pengembangan yang digerakkan oleh tes, dan terus menerus memperbaiki kode, saya tidak perlu "merencanakan" kode tersebut. Saya hanya memuaskan satu test case satu demi satu, dan desain muncul dari refactoring. Ini selalu merupakan desain yang lebih baik daripada rencana apa pun yang bisa saya buat sebelum coding.
sumber