Seharusnya folder dalam larutan pertandingan namespace?

Seharusnya folder dalam larutan pertandingan namespace?

Di salah satu dari tim proyek, kami memiliki perpustakaan kelas yang memiliki banyak sub-folder dalam proyek.

Project Name dan Namespace: MyCompany.Proyek.Bagian.

Dalam proyek ini, ada beberapa folder yang sesuai nama bagian:

  • Folder Kendaraan memiliki kelas di MyCompany.Proyek.Bagian.Kendaraan namespace
  • Folder Pakaian memiliki kelas diMyCompany.Proyek.Bagian.Pakaian namespace
  • dll.

Dalam proyek yang sama, lebih nakal lagi folder

  • Folder BusinessObjects memiliki kelas di MyCompany.Proyek.Bagian namespace

Ada beberapa kasus seperti ini di mana folder yang dibuat untuk "organisasi kenyamanan".

Pertanyaan saya adalah: Apa's standar? Di kelas perpustakaan lakukan folder biasanya mencocokkan nama struktur atau campuran tas?

Mengomentari pertanyaan (1)
Larutan

Juga, perhatikan bahwa jika anda menggunakan built-in template untuk menambahkan kelas ke sebuah folder, maka akan secara default akan dimasukkan ke dalam sebuah namespace yang mencerminkan hirarki folder.

Kelas akan lebih mudah untuk menemukan dan itu saja harus menjadi alasan yang cukup baik.

Aturan yang kita ikuti adalah:

  • Proyek/perakitan nama yang sama sebagai root namespace, kecuali untuk .dll berakhir
    • Satunya pengecualian dari aturan di atas adalah sebuah proyek dengan .Inti akhir,.Inti menanggalkan
  • Folder yang sama dengan nama
  • Salah satu jenis per file (kelas, struct, enum, delegasi, dll.) membuatnya mudah untuk menemukan file yang tepat
Komentar (3)

No. I've mencoba kedua metode pada usaha kecil dan proyek-proyek besar, baik dengan tunggal (aku) dan tim pengembang. Saya menemukan yang paling sederhana dan paling produktif rute adalah untuk memiliki satu namespace per proyek dan semua kelas masuk ke dalam namespace tersebut. Maka anda bebas untuk menempatkan kelas file apapun ke folder proyek anda inginkan. Tidak ada main-main tentang menambahkan menggunakan pernyataan di atas file dalam satu waktu hanya ada satu namespace. Hal ini penting untuk mengatur sumber file ke dalam folder dan menurut pendapat saya yang's semua folder harus digunakan untuk. Mensyaratkan bahwa folder ini juga peta untuk namespaces adalah tidak perlu, menciptakan lebih banyak pekerjaan, dan saya menemukan itu benar-benar berbahaya bagi organisasi karena beban tambahan mendorong disorganisasi. Mengambil ini FxCop peringatan misalnya:

CA1020: Menghindari namespaces dengan beberapa jenis penyebab: namespace lain dari global namespace berisi kurang dari lima jenis https://msdn.microsoft.com/en-gb/library/ms182130.aspx Peringatan ini mendorong dumping file baru ke generik Proyek.Folder umum, atau bahkan proyek akar sampai anda memiliki empat kelas yang sama untuk membenarkan membuat folder baru. Akan pernah terjadi? Mencari File Jawaban yang diterima mengatakan "kelas akan lebih mudah untuk menemukan dan itu saja harus menjadi alasan yang cukup baik." Saya menduga jawabannya adalah mengacu untuk memiliki beberapa ruang nama dalam sebuah proyek yang don't peta untuk struktur folder, bukan apa yang saya sarankan adalah sebuah proyek dengan satu namespace. Dalam hal apapun selagi bisa't menentukan folder file kelas lebih dalam dari namespace, anda dapat menemukannya dengan menggunakan Pergi Ke Definisi atau pencarian solusi explorer box pada Visual Studio. Juga ini isn't benar-benar masalah besar dalam pendapat saya. Saya don't bahkan mengeluarkan 0.1% saya waktu pengembangan pada masalah untuk menemukan file untuk membenarkan mengoptimalkan itu. Nama bentrokan Pasti membuat beberapa namespaces memungkinkan proyek untuk memiliki dua kelas dengan nama yang sama. Tapi apakah itu benar-benar hal yang baik? Itu mungkin lebih mudah untuk hanya melarang itu menjadi mungkin? Memungkinkan dua kelas dengan nama yang sama menciptakan situasi yang lebih kompleks di mana 90% dari waktu hal-hal bekerja dengan cara tertentu dan kemudian tiba-tiba anda menemukan anda memiliki kasus khusus. Katakanlah anda memiliki dua Persegi panjang kelas didefinisikan secara terpisah namespaces: kelas Project1.Gambar.Persegi panjang kelas Project1.Jendela.Persegi panjang It's mungkin untuk memukul sebuah isu yang sumber file perlu mencakup ruang nama. Sekarang anda harus menulis penuh namespace di mana-mana dalam file tersebut:

var rectangle = new Project1.Window.Rectangle();

Atau main-main dengan beberapa jahat menggunakan pernyataan:

using Rectangle = Project1.Window.Rectangle;

Dengan satu namespace dalam proyek anda, anda dipaksa untuk datang dengan berbeda, dan I'd berdebat lebih deskriptif, nama-nama seperti ini: kelas Project1.ImageRectangle kelas Project1.WindowRectangle Dan penggunaan yang sama di mana-mana, anda don't harus berurusan dengan kasus khusus ketika file menggunakan kedua jenis. menggunakan pernyataan

using Project1.General;  
using Project1.Image;  
using Project1.Window;  
using Project1.Window.Controls;  
using Project1.Shapes;  
using Project1.Input;  
using Project1.Data;  

vs

using Project1;

Kemudahan tidak harus menambah ruang nama semua waktu ketika menulis kode. It's tidak waktu yang dibutuhkan benar-benar, itu's istirahat di aliran harus melakukan itu dan hanya mengisi file dengan banyak menggunakan pernyataan - untuk apa? Apakah itu layak? Proyek yang mengubah struktur folder Jika folder yang dipetakan ke namespaces maka folder proyek jalan efektif keras-kode dalam setiap file sumber. Ini berarti setiap mengubah nama atau memindahkan file atau folder dalam proyek memerlukan sebenarnya isi file berubah. Kedua deklarasi namespace file dalam folder itu dan menggunakan pernyataan dalam banyak file lain yang referensi kelas dalam folder itu. Sementara perubahan itu sendiri yang sepele dengan perkakas, biasanya hasil yang besar melakukan yang terdiri dari banyak file dan kelas-kelas modern't bahkan berubah. Dengan satu namespace dalam proyek anda dapat mengubah folder proyek struktur namun anda inginkan tanpa ada sumber file diri yang dimodifikasi. Visual Studio secara otomatis peta namespace baru file ke folder proyek itu's dibuat di Disayangkan, tapi saya menemukan kerumitan mengoreksi namespace adalah kurang dari kerumitan berurusan dengan mereka. Juga saya've masuk ke kebiasaan copy paste file yang ada daripada menggunakan Add->Baru. Intellisense dan Objek Browser

Manfaat terbesar dalam pendapat saya menggunakan beberapa nama dalam proyek-proyek besar adalah memiliki organisasi ekstra ketika melihat kelas-kelas di setiap perkakas yang menampilkan kelas-kelas dalam namespaces hirarki. Bahkan dokumentasi. Jelas-jelas memiliki hanya satu nama dalam hasil-hasil proyek di semua kelas yang ditampilkan dalam satu daftar daripada dipecah menjadi kategori. Namun secara pribadi saya've pernah bingung atau tertunda karena kekurangan ini jadi saya don't menemukan itu cukup besar manfaat untuk membenarkan beberapa namespaces. Meskipun jika saya menulis besar public class library kemudian aku akan mungkin menggunakan beberapa ruang nama proyek sehingga majelis tampak rapi dalam perkakas dan dokumentasi.

Komentar (11)

Saya pikir standar, dalam .NET, adalah untuk mencoba untuk melakukannya bila mungkin, tapi tidak untuk membuat tidak perlu struktur dalam hanya untuk mematuhi hal itu sebagai aturan keras. Tidak satupun dari proyek-proyek saya ikuti namespace == struktur aturan 100% dari waktu, kadang-kadang hanya bersih/baik untuk keluar dari aturan tersebut.

Di Jawa anda don't memiliki pilihan. I'd menyebut bahwa kasus klasik dari apa yang bekerja pada teori yang lebih baik dari apa yang bekerja dalam praktek.

Komentar (1)

@lassevk: saya setuju dengan aturan ini, dan satu lagi untuk menambahkan.

Ketika saya telah bersarang kelas, aku masih perpecahan mereka, satu per file. Seperti ini:

// ----- Foo.cs
partial class Foo
{
    // Foo implementation here
}

dan

// ----- Foo.Bar.cs
partial class Foo
{
    class Bar
    {
        // Foo.Bar implementation here
    }
}
Komentar (0)

I'd mengatakan ya.

Pertama, akan lebih mudah untuk menemukan kode yang sebenarnya file berikut ke namespaces (misalnya, ketika seseorang e-mail anda telanjang terkecuali call stack). Jika anda membiarkan folder anda pergi keluar dari sinkronisasi dengan namespaces, menemukan file besar codebases menjadi semakin melelahkan.

Kedua, LENSA ini akan menghasilkan kelas-kelas baru yang akan anda buat folder dengan namespace yang sama induknya struktur folder. Jika anda memutuskan untuk berenang melawan ini, itu akan menjadi hanya satu pipa pekerjaan yang harus dilakukan sehari-hari ketika menambahkan file baru.

Tentu saja, ini berjalan tanpa mengatakan bahwa salah satu harus konservatif tentang seberapa dalam xis folder/namespace hirarki pergi.

Komentar (0)

Ya mereka harus, hanya menyebabkan kebingungan sebaliknya.

Komentar (0)

Yang's standar?

Tidak ada standar resmi, tetapi secara konvensional folder-untuk-namespace pemetaan pola yang paling banyak digunakan.

Di kelas perpustakaan lakukan folder biasanya mencocokkan nama struktur atau campuran tas?

Ya, di sebagian besar perpustakaan kelas folder sesuai dengan nama organisasi yang mudah.

Komentar (0)