Apakah Anda memiliki gaya tertentu dalam mengatur proyek?
Misalnya, saat ini saya sedang membuat proyek untuk beberapa sekolah di sini di Bolivia, ini adalah bagaimana saya mengelolanya:
TutoMentor (Solution)
TutoMentor.UI (Winforms project)
TutoMentor.Data (Class library project)
Bagaimana tepatnya Anda mengatur proyek Anda? Apakah Anda memiliki contoh sesuatu yang Anda kelola dan banggakan? Bisakah Anda berbagi tangkapan layar panel Solusi?
Di area UI aplikasi saya, saya mengalami masalah dalam memutuskan skema yang baik untuk mengatur berbagai bentuk dan di mana mereka berada.
Sunting:
Bagaimana dengan mengatur berbagai bentuk dalam proyek .UI? Di mana / bagaimana saya harus mengelompokkan bentuk yang berbeda? Menempatkan mereka semua di tingkat akar proyek adalah ide yang buruk.
Jawaban:
Ketika mendesain proyek dan meletakkan arsitektur saya mulai dari dua arah. Pertama saya melihat proyek yang sedang dirancang dan menentukan masalah bisnis apa yang perlu diselesaikan. Saya melihat orang-orang yang akan menggunakannya dan mulai dengan desain UI kasar. Pada titik ini saya mengabaikan data dan hanya melihat apa yang diminta pengguna dan siapa yang akan menggunakannya.
Setelah saya memiliki pemahaman dasar tentang apa yang mereka minta, saya menentukan apa data inti yang akan mereka manipulasi dan memulai tata letak basis data dasar untuk data itu. Lalu saya mulai mengajukan pertanyaan untuk mendefinisikan aturan bisnis yang mengelilingi data.
Dengan memulai dari kedua ujungnya secara mandiri, saya dapat membuat proyek dengan cara yang menggabungkan kedua ujungnya menjadi satu. Saya selalu mencoba untuk menjaga desain terpisah selama mungkin sebelum menyatukannya, tetapi ingat persyaratan masing-masing saat saya bergerak maju.
Setelah saya memiliki pemahaman yang baik tentang setiap akhir masalah, saya mulai menjabarkan struktur proyek yang akan dibuat untuk menyelesaikan masalah.
Setelah tata letak dasar dari solusi proyek dibuat, saya melihat fungsionalitas proyek dan mengatur set dasar ruang nama yang digunakan tergantung pada jenis pekerjaan yang dilakukan. Ini mungkin hal-hal seperti Akun, Keranjang Belanja, Survei, dll.
Berikut adalah tata letak solusi dasar yang selalu saya mulai. Ketika proyek didefinisikan dengan lebih baik, saya memperbaikinya untuk memenuhi kebutuhan spesifik setiap proyek. Beberapa area dapat digabung dengan yang lain dan saya dapat menambahkan beberapa yang khusus sesuai kebutuhan.
Nama Solusi
sumber
Saya suka membagi proyek saya menjadi beberapa layer
Dengan begitu, lebih mudah untuk mengelola dependensi siklik. Saya dapat menjamin bahwa tidak ada proyek yang mengimpor proyek View (layer) secara tidak sengaja, misalnya. Saya juga cenderung memecah lapisan saya di sub-lapisan. Jadi semua solusi saya memiliki daftar proyek seperti ini:
Mereka adalah "blok bangunan" aplikasi saya yang lebih besar. Kemudian di dalam setiap proyek saya mengatur ruang nama secara lebih logis tetapi sangat bervariasi. Untuk UI saat membuat banyak bentuk, saya mencoba berpikir dalam divisi spasial dan kemudian membuat ruang nama untuk setiap "ruang". Katakanlah ada sekelompok preferensi pengguna yang dikontrol pengguna dan formulir, saya akan memiliki namespace yang disebut UserPreferences untuk mereka, dan seterusnya.
sumber
Core
cukup berbahaya, karena mengarah ke desain kode monolitik, di mana sebagian besar logika masuk atau tidakCore
. Misalnya: Logika yang tidak terdengar seperti Model, Presenter, Kegigihan, UI, Validasi, Laporan, Web, secara alami akan dilempar keCore
.Core
proyek Anda menjadi sampah monolitik atau dengan menyelamatkan Anda dari solusi yang berisi ratusan proyek. Adalah tanggung jawab pengembang untuk mengambil keputusan itu, tidak ada struktur proyek yang dapat menyelamatkan pembuat kode jahat dari melakukan hal-hal buruk.Mengorganisir Proyek
Saya biasanya mencoba membagi proyek saya dengan namespace, seperti yang Anda katakan. Setiap tingkatan aplikasi, atau komponen adalah proyeknya sendiri. Ketika sampai pada bagaimana saya memutuskan bagaimana memecah solusi saya ke dalam proyek, saya fokus pada usabilitas dan ketergantungan dari proyek-proyek itu. Saya berpikir tentang bagaimana anggota lain dari tim saya akan menggunakan proyek, dan jika proyek lain yang kita buat di jalan mungkin mendapat manfaat dari menggunakan beberapa komponen sistem.
Sebagai contoh, kadang-kadang, hanya memiliki proyek ini, yang memiliki seluruh rangkaian kerangka kerja (email, logging, dll) sudah cukup:
Di waktu lain, saya mungkin ingin memecah kerangka menjadi beberapa bagian, sehingga mereka dapat diimpor secara individual:
Formulir Pengorganisasian
Mengorganisir Formulir di bawah proyek UI akan benar-benar berubah ketika proyek Anda diperluas.
Kecil - Folder Formulir sederhana dapat mencukupi untuk proyek yang sangat kecil. Kadang-kadang Anda bisa membuat struktur yang berlebihan seperti halnya Anda bisa menggunakan ruang nama dan membuat segalanya menjadi lebih rumit dari yang seharusnya.
Sedang hingga Besar - Di sini, saya biasanya mulai membagi formulir menjadi beberapa bidang fungsional. Jika saya memiliki satu bagian dari aplikasi saya yang memiliki 3 formulir untuk mengelola pengguna dan beberapa yang melacak permainan dan skor sepak bola, maka saya akan memiliki Formulir> area Pengguna dan formulir> area Permainan atau sesuatu seperti itu. Itu benar-benar tergantung pada sisa proyek, berapa banyak bentuk yang saya miliki sampai seberapa halus saya memecahnya.
Ingat, pada akhirnya, ruang nama dan folder ada di sana untuk membantu Anda mengatur dan menemukan sesuatu dengan lebih cepat.
Sungguh, itu tergantung pada tim Anda, proyek Anda, dan apa yang lebih mudah bagi Anda. Saya menyarankan bahwa secara umum, Anda membuat proyek terpisah untuk setiap lapisan / komponen sistem Anda, tetapi selalu ada pengecualian.
Untuk panduan tentang arsitektur sistem, lihat situs Pola dan Praktek Microsoft.
sumber
Ketika saya menulis kode di .NET, ada kecenderungan yang jelas untuk memiliki kelompok fungsi yang terkait. Masing-masing mungkin memiliki beberapa sub-set yang sama. Saya suka membagi kelompok utama secara fisik - salah satunya per proyek VS. Saya kemudian lebih lanjut membagi secara logis menggunakan majelis. Mengikuti pola ini, salah satu proyek saya saat ini terlihat seperti ini:
Semoga bermanfaat bagi Anda. Tingkat pemisahan membuat saya perlu waktu untuk memikirkannya.
sumber
Ada baiknya memiliki rencana untuk mengatur solusi Anda, dan ada beberapa cara untuk melakukannya. Kami memiliki beberapa fungsionalitas yang dibagikan di beberapa proyek, yang juga memberikan konsistensi bagi pengguna kami. Organisasi proyek tergantung pada apa yang kita lakukan. Pada intinya kita akan memiliki:
Dari sana itu sangat tergantung pada pengaturannya. Jika kita memiliki aplikasi klien dan ujung depan web (berguna untuk mengumpulkan hasil penggunaan di ruang kelas atau penelitian lainnya), kita memerlukan proyek yang memiliki kode yang umum dibagikan (yaitu objek data yang akan diserialisasi).
Sub proyek lain dapat ditambahkan jika perlu. Seperti yang saya katakan, itu sangat tergantung pada proyek. Beberapa proyek sangat sederhana, dan hanya membutuhkan elemen inti. Kami mencoba untuk melawan pemisahan proyek yang sewenang-wenang, jadi membaginya dengan lapisan benar-benar masuk akal. Lapisan didefinisikan oleh apa yang perlu dibagikan di seluruh proyek, solusi, atau apa yang perlu plugin / ekstensi.
sumber
Sangat menarik bahwa begitu banyak orang tidak menganggap KERING di sini. Itu terjadi beberapa kali dalam hidup saya bahwa pengembang membuat struktur direktori yang tidak dapat membangun karena itu. Jauhkan nama proyek dari solusi dan direktori proyek!
Jadi inilah cara saya:
sumber
DRY
? Singkatan untuk sesuatu?Logic
? tidak bisakah ada logika diCommon
folder juga?Ketika saya mendesain aplikasi saya, saya selalu melihatnya sebagai modul dengan beberapa dependensi di antara mereka. Ketika saya memiliki desain dalam pikiran, maka saya menggunakan strategi bottom-up untuk mengembangkannya. Saya mengembangkan setiap modul dan kemudian saya membuatnya bekerja bersama.
Nah, modul - modul itu adalah proyek di bawah solusi saya (biasanya perpustakaan kelas ). Setiap modul memiliki namespace yang berbeda dan desainnya sendiri (berisi kelas , dll).
Salah satu modul tersebut adalah GUI ( Graphical User Interface ).
Saya juga selalu menggunakan alat Kontrol Revisi untuk melacak perubahan di setiap proyek. Saya sarankan Git . Ini sumber terbuka, didistribusikan, dan gratis untuk digunakan.
sumber
Setiap kali saya memulai proyek baru saya mendapatkan spesifikasi luas tentang apa yang seharusnya dilakukan. Memiliki masukan ini membantu saya dengan memberikan saya konteks, oleh karena itu saya terus maju dan memikirkan metode terbaik (atau paling tepat) untuk mencapai tujuan proyek. Pada titik ini saya mulai berpikir di mana pola desgin dapat membantu saya memberikan solusi yang dimaksud. Di sinilah saya mulai mengatur proyek, dengan mempertimbangkan pola desain yang akan saya adopsi untuk proyek tersebut.
Beberapa contoh:
Ingatlah bahwa masing-masing akan memaksa Anda untuk mengatur proyek Anda dengan cara tertentu.
Berikut ini beberapa bacaan untuk Anda:
Pola Desain Bersih .
Pola Desain .
Desain Berorientasi Objek .
Semoga ini membantu.
sumber