Bagi anda di Visual Studio lingkungan, bagaimana perasaan anda tentang kado apapun dari kode anda di #daerah? (atau jika ada IDE lain memiliki sesuatu yang sama...)
9 dari 10 kali, kode lipat berarti bahwa anda telah gagal untuk menggunakan SoC prinsip untuk apa nilainya.
Saya lebih atau kurang merasakan hal yang sama tentang kelas parsial. Jika anda memiliki sepotong kode yang anda pikirkan terlalu besar, anda perlu untuk memotong itu di dikelola (dan reusable) bagian, tidak menyembunyikan atau membaginya.
Itu akan menggigit anda waktu berikutnya seseorang perlu untuk mengubah hal itu, dan tidak bisa melihat logika yang tersembunyi dalam 250 line rakasa metode.
Setiap kali anda bisa, tarik beberapa kode dari kelas utama, dan menjadi penolong atau pabrik kelas.
foreach (var item in Items)
{
//.. 100 lines of validation and data logic..
}
tidak seperti yang dibaca sebagai
foreach (var item in Items)
{
if (ValidatorClass.Validate(item))
RepositoryClass.Update(item);
}
My $0.02 lagian.
Ini masih berbicara tentang di Coding Horor.
Keyakinan pribadi saya adalah bahwa adalah bahwa mereka berguna, tapi seperti apa pun bisa menjadi terlalu banyak.
Saya menggunakannya untuk pesanan saya blok kode menjadi:
Mantri
Deklarasi
Konstruktor
Metode
Event Handler
Sifat
Kadang-kadang anda mungkin menemukan diri anda bekerja di sebuah tim di mana #daerah yang dianjurkan atau diperlukan. Jika anda're seperti saya dan anda bisa't stand main-main dengan dilipat kode yang anda dapat mematikan menguraikan untuk C#:
Sementara saya memahami masalah yang Jeff, et. al. dengan daerah, apa yang saya don't memahami mengapa memukul CTRL+M,CTRL+L untuk memperluas daerah-daerah di file ini sangat sulit untuk berurusan dengan.
Saya menggunakan #Wilayah untuk menyembunyikan jelek dan tidak berguna secara otomatis kode yang dihasilkan, yang benar-benar milik di bagian otomatis parsial kelas. Tapi, ketika bekerja dengan proyek-proyek lama atau upgrade proyek, anda don't selalu memiliki kemewahan itu.
Adapun jenis lain dari lipat, aku melipat Fungsi sepanjang waktu. Jika nama anda berfungsi dengan baik, anda tidak akan pernah melihat ke dalam kecuali anda're pengujian sesuatu atau (re-)menulis itu.
Saya menggunakan Textmate (Mac) yang memiliki Kode lipat, dan saya menemukan itu benar-benar berguna untuk melipat fungsi, saya tahu apa yang saya "getGet" fungsi tidak, aku don't perlu mengambil 10 baris oh begitu berharga ruang layar.
Saya tidak pernah menggunakannya untuk menyembunyikan untuk loop, jika pernyataan atau serupa kecuali menunjukkan kode untuk orang lain di mana aku akan menyembunyikan kode yang telah mereka lihat untuk menghindari menunjukkan kode yang sama dua kali.
Saya lebih suka parsial kelas sebagai lawan ke daerah-daerah.
Penggunaan yang luas dari daerah yang lain juga memberi saya kesan bahwa seseorang, di suatu tempat, melanggar Satu tanggung Jawab Prinsip dan mencoba untuk melakukan terlalu banyak hal dengan satu objek.
@Tom
Parsial kelas yang disediakan sehingga anda dapat memisahkan alat auto-generated code dari segala penyesuaian yang mungkin anda butuhkan untuk membuat setelah kode gen telah melakukan sedikit. Ini berarti kode anda tetap utuh setelah anda kembali menjalankan codegen dan doesn't mendapatkan ditimpa. Ini adalah hal yang baik.
I'm bukan penggemar parsial kelas - saya mencoba untuk mengembangkan kelas-kelas sehingga setiap kelas memiliki sangat jelas, satu masalah yang's yang bertanggung jawab. Untuk itu, saya don't percaya bahwa sesuatu dengan jelas tanggung jawab harus dibagi di beberapa file. Yang's mengapa saya don't seperti kelas parsial.
Dengan mengatakan bahwa, saya'm di pagar tentang daerah. Untuk sebagian besar, saya don't menggunakan mereka; namun, saya bekerja dengan kode setiap hari yang mencakup daerah - beberapa orang benar-benar berat pada mereka (melipat metode swasta ke suatu daerah dan kemudian masing-masing metode dilipat ke wilayah), dan beberapa orang pergi cahaya pada mereka (melipat enums, melipat atribut, dll). Saya aturan umum, seperti sekarang ini, adalah bahwa saya hanya menempatkan kode daerah jika (a) data kemungkinan akan tetap statis atau tidak akan menyentuh sangat sering (seperti enums), atau (b) jika ada metode yang dilaksanakan dari kebutuhan karena subclassing atau abstrak metode pelaksanaan, tapi, sekali lagi, tidak't disentuh sangat sering.
Daerah yang tidak boleh digunakan dalam metode. Mereka dapat digunakan untuk kelompok metode, tetapi ini harus ditangani dengan sangat hati-hati sehingga pembaca kode tidak gila. Tidak ada gunanya lipat metode oleh mereka pengubah. Tapi kadang-kadang lipat dapat meningkatkan keterbacaan. Misalnya pengelompokan beberapa metode yang anda gunakan untuk bekerja di sekitar beberapa masalah ketika menggunakan perpustakaan eksternal dan anda tidak't ingin mengunjungi terlalu sering dapat membantu. Tapi coder harus selalu mencari solusi seperti pembungkus perpustakaan sesuai dengan kelas-kelas dalam contoh khusus ini. Ketika semua yang lain gagal, gunakan lipat untuk meningkatkan readibility.
Wilayah folding akan baik-baik saja jika aku tidak't harus secara manual mempertahankan pengelompokan wilayah berdasarkan fitur dari kode saya yang intrinsik untuk bahasa. Misalnya, kompilator sudah tahu itu's konstruktor. IDE's kode model sudah tahu itu's konstruktor. Tapi jika saya ingin melihat tampilan dari kode di mana konstruktor dikelompokkan bersama-sama, untuk beberapa alasan aku harus menyatakan kembali fakta bahwa hal-hal ini konstruktor, dengan fisik menempatkan mereka bersama-sama dan kemudian menempatkan kelompok di sekitar mereka. Hal yang sama berlaku untuk setiap cara lain untuk mengiris kelas/struct/antarmuka. Bagaimana jika saya berubah pikiran dan ingin melihat masyarakat/protected/barang-barang pribadi dipisahkan ke dalam kelompok pertama, dan kemudian dikelompokkan dengan anggota jenis?
Menggunakan daerah untuk menandai sifat umum (misalnya) adalah seburuk memasuki berlebihan komentar yang menambah apa-apa terhadap apa yang sudah dilihat jelas dari kode itu sendiri.
Lagi pula, untuk menghindari harus menggunakan daerah untuk tujuan itu, saya menulis gratis, open source Visual Studio 2008 IDE add-in yang disebut Ora. Ini menyediakan dikelompokkan view secara otomatis, sehingga jauh lebih sedikit diperlukan untuk menjaga fisik pengelompokan atau menggunakan daerah. Anda mungkin menemukan itu berguna.
Saya biasanya menemukan bahwa ketika berurusan dengan kode seperti Peristiwa di C# mana ada's tentang 10 baris kode yang sebenarnya hanya bagian dari acara deklarasi (yang EventArgs kelas delegasi deklarasi dan acara deklarasi) Menempatkan wilayah di sekitar mereka dan kemudian lipat mereka keluar dari jalan membuatnya sedikit lebih mudah dibaca.
Saya pribadi menggunakan #Daerah sepanjang waktu. Saya menemukan bahwa hal ini membantu saya untuk menjaga hal-hal seperti sifat, deklarasi, dll terpisah satu sama lain.
Ini mungkin adalah jawaban yang baik, terlalu!
Edit: Dang, Pat mengalahkan saya untuk ini!
Saya berpikir bahwa itu's alat yang berguna, bila digunakan dengan benar. Dalam banyak kasus, saya merasa bahwa metode dan mantri dan hal-hal lain yang sering dilipat harus kotak hitam kecil. Kecuali anda harus melihat mereka untuk beberapa alasan, mereka isi don't peduli dan harus tersembunyi sebanyak mungkin. Namun, saya tidak pernah melipat metode swasta, komentar, atau kelas batin. Metode dan enums benar-benar satu-satunya hal yang saya lipat.
Pendekatan ini mirip dengan beberapa orang lain di sini, menggunakan daerah untuk mengatur blok kode ke konstruktor, properti, acara, dll.
Ada's set yang sangat baik dari VS.NET makro oleh Roland Weigelt tersedia dari blog-nya masuk, Baik Dukungan Keyboard untuk #wilayah ... #endregion. I've telah menggunakan ini selama bertahun-tahun, pemetaan ctrl+. runtuh saat ini wilayah dan ctrl++ untuk memperluas itu. Menemukan bahwa ia bekerja jauh lebih baik bahwa default VS.NET fungsi yang lipatan/terungkap semuanya.
The Coding Horor artikel yang sebenarnya membuat saya berpikir tentang hal ini juga.
Umumnya, saya kelas-kelas besar aku akan menempatkan wilayah seluruh anggota variabel, konstanta, dan sifat untuk mengurangi jumlah teks yang saya harus gulir melalui dan meninggalkan segala sesuatu yang lain di luar wilayah. Pada bentuk saya akan umumnya kelompok hal-hal yang menjadi "anggota variabel, konstanta, dan sifat", bentuk fungsi, dan event handler. Sekali lagi, ini lebih jadi saya don't harus gulir melalui banyak teks ketika saya hanya ingin mengulas beberapa event handler.
Gerhana melakukan beberapa hal ini di Jawa (atau PHP dengan plugin) sendiri. Memungkinkan anda untuk melipat dan fungsi tersebut. Saya cenderung seperti itu. Jika aku tahu apa itu fungsi tidak dan saya tidak bekerja di atasnya, saya tidak perlu melihat itu.