it-swarm-id.com

Bagaimana Anda mengatur proyek Anda?

Apakah Anda memiliki gaya tertentu dalam mengatur proyek?

Sebagai contoh, 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 kesulitan dalam memutuskan skema yang baik untuk mengatur berbagai bentuk dan di mana mereka berada.


Edit:

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.

150
Sergio

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 ujung 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 kuat 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-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.

SolutionName

.ProjectNameDocuments
    For large projects there are certain documents that need to be kept with
    it. For this I actually create a separate project or folder within the 
    solution to hold them.
.ProjectNameUnitTest
    Unit testing always depends on the project - sometimes it is just really 
    basic to catch Edge cases and sometimes it is set up for full code 
    coverage.  I have recently added graphical unit testing to the arsenal.
.ProjectNameInstaller
    Some projects have specific installation requirements that need to be 
    handled at a project level.
.ProjectNameClassLibrary
    If there is a need for web services, APIs, DLLs or such.
.ProjectNameScripts (**Added 2/29/2012**)
    I am adding this because I just found a need for one in my current project.  
    This project holds the following types of scripts: SQL (Tables, procs, 
    views), SQL Data update scripts, VBScripts, etc.
.ProjectName
    .DataRepository 
        Contains base data classes and database communication.  Sometimes 
        also hold a directory that contains any SQL procs or other specific 
        code.  
    .DataClasses
        Contains the base classes, structs, and enums that are used in the 
        project.  These may be related to but not necessarily be connected
        to the ones in the data repository.
    .Services 
        Performs all CRUD actions with the Data, done in a way that the 
        repository can be changed out with no need to rewrite any higher 
        level code.
    .Business
        Performs any data calculations or business level data validation,
        does most interaction with the Service layer.
    .Helpers
        I always create a code module that contains helper classes.  These 
        may be extensions on system items, standard validation tools, 
        regular expressions or custom-built items.  
    .UserInterface
        The user interface is built to display and manipulate the data.  
        UI Forms always get organized by functional unit namespace with 
        additional folders for shared forms and custom controls.
109
Amy Patterson

Saya suka membagi proyek saya menjadi beberapa lapisan

Dengan begitu, lebih mudah untuk mengelola dependensi siklik. Saya dapat menjamin bahwa tidak ada proyek yang mengimpor proyek View (layer) karena kesalahan, misalnya. Saya juga cenderung memecah lapisan saya di sub-lapisan. Jadi semua solusi saya punya daftar proyek seperti ini:

  • Product.Core
  • Model produk
  • Product.Presenter
  • Product.Persistensi
  • Product.UI
  • Product.Validation
  • Product.Laporan
  • Produk

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.

69
Alex

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 dapat digunakan kembali dan dependensi dari proyek-proyek tersebut. 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.

Misalnya, kadang-kadang, hanya memiliki proyek ini, yang memiliki seluruh rangkaian kerangka kerja (email, logging, dll) sudah cukup:

MyCompany.Frameworks

Di lain waktu, saya mungkin ingin memecah kerangka menjadi beberapa bagian, sehingga mereka dapat diimpor secara individual:

MyCompany.Frameworks.Networking
MyCompany.Frameworks.Logging
MyCompany.Frameworks.SomeLOBFramework

Formulir Pengorganisasian

Mengatur Formulir di bawah proyek UI akan benar-benar berubah ketika proyek Anda diperluas.

  • Kecil - Sederhana Formulir folder 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 saya menjadi area fungsional. Jika saya memiliki satu bagian dari aplikasi saya yang memiliki 3 formulir untuk mengelola pengguna dan beberapa yang melacak pertandingan dan skor sepak bola, maka saya akan memiliki Formulir> Pengguna area dan a = Formulir> Game area 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.

19
Ryan Hayes

Ketika saya menulis kode dalam. 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:

  • Wadmt (solusi)
    • Wadmt.Common
    • Wadmt.Data
      • Wadmt.Data.MySql
      • Wadmt.Data.SqlServer
      • Wadmt.Data.Oracle
    • Wadmt.Domain
    • Wadmt.Layanan
    • Wadmt.Tests
      • Wadmt.Tests.Common
      • Wadmt.Tests.Domain
      • Wadmt.Tests.Services
      • Wadmt.Tests.Integration
    • WebWeb

Semoga bermanfaat bagi Anda. Tingkat pemisahan membuat saya perlu waktu untuk memikirkannya.

12
Grant Palin

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:

Company (solution)
  Company.Common (shared library)
  Company.Project (Main application UI)
  Company.Project.UnitTests (Unit tests for all project modules)
  Company.Project.IntegrationTests (integration tests for all project modules)
  Company.Project.AutomationTests (tests that invoke the UI)

Dari sana itu sangat tergantung pada pengaturannya. Jika kami memiliki aplikasi klien dan ujung depan web (berguna untuk mengumpulkan hasil penggunaan di ruang kelas atau penelitian lainnya), kami memerlukan proyek yang memiliki kode yang umum dibagikan (yaitu objek data yang akan diserialisasi).

  Company.Project.Model (ORM and business logic layer)
  Company.Project.Webapp (Web frontend/web service layer)
  Company.Project.WebClient (client code for web services)

Subproyek lain dapat ditambahkan seperlunya. 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 layer benar-benar masuk akal. Lapisan didefinisikan oleh apa yang perlu dibagikan di seluruh proyek, solusi, atau apa yang perlu plugin/ekstensi.

7
Berin Loritsch

Sangat menarik bahwa begitu banyak orang tidak mempertimbangkan DRY di sini. Itu terjadi beberapa kali dalam hidup saya bahwa pengembang membuat struktur direktori yang tidak dapat membangun karena itu. Pertahankan nama proyek solusi keluar dan direktori proyek!

Jadi inilah cara saya:

{drive}:\{customer}\{apps|libs|tools}\{project}
  - cer
  - res
  - src
   - Common
   - Data
   - UI
   - Logic
   - Logic._Tests  

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 lalu saya membuatnya bekerja bersama.

Ya, 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 dari mereka modul adalah [~ # ~] gui [~ # ~] (Antarmuka Pengguna Grafis).

Saya juga selalu menggunakan alat Kontrol Revisi untuk melacak perubahan di setiap proyek. Saya sarankan Git . Ini sumber terbuka, didistribusikan, dan gratis untuk digunakan.

2
Oscar Mederos

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:

  1. Jika proyek hanya merujuk pada pembuatan layar input data. Kemungkinan besar saya akan menggunakan pola MVC.
  2. Jika proyek ini akan digunakan sebagai UI tugas berat yang paling mendukung platform multipel, pola desgin MVVM menjadi bermanfaat.

Ingatlah bahwa masing-masing akan memaksa Anda untuk mengatur proyek Anda dengan cara tertentu.

Berikut ini beberapa bacaan untuk Anda:

. Pola Desain Net .

Pola Desain .

Desain Berorientasi Objek .

Semoga ini membantu.

1
El Padrino