Contoh yang Anda berikan sebenarnya baik-baik saja menurut saya. Anda mendeklarasikan kelas dalam , jadi sangat masuk akal untuk menyimpannya di file yang sama . Satu-satunya cara untuk mengatasi hal ini adalah membuat Items
kelas Anda menjadi kelas parsial dan membaginya menjadi beberapa file. Saya akan mempertimbangkan praktik buruk ini. Kebijakan umum saya untuk kelas bersarang adalah mereka harus berukuran kecil dan pribadi. Ada dua pengecualian untuk ini:
- Anda mendesain klaster kelas (lebih umum di tujuan-c), sehingga mungkin masuk akal untuk menggunakan pendekatan kelas parsial
- Anda memerlukan enum yang hanya digunakan dengan API publik dari kelas induk. Dalam hal ini saya lebih suka mengumumkan enum publik di dalam kelas induk daripada mencemari namespace saya. Enum yang menjadi "inner enum" secara efektif menghasilkan ruang lingkup yang didefinisikan dengan baik.
Jika Anda mengucapkan pertanyaan sedikit berbeda dan bertanya tentang "Haruskah saya menempatkan setiap kelas tingkat- namespace ke file sendiri" maka jawaban saya akan "ya".
Saat merancang kelas, kami menghormati Prinsip Tanggung Jawab Tunggal. Membaca kode menjadi jauh lebih mudah jika bentuknya mengikuti semantiknya, maka memecah file berdasarkan kelas adalah masuk akal.
Dari sudut pandang mekanik, memiliki file per kelas memiliki beberapa keunggulan. Anda dapat membuka banyak kelas secara bersamaan di jendela yang berbeda. Ini sangat penting karena tidak ada pengembang serius yang bekerja dengan kurang dari dua layar. Mampu memiliki lebih banyak konteks di depan kepala saya berarti saya dapat menyimpan lebih banyak konteks di kepala saya. (Sebagian besar IDE akan memungkinkan Anda untuk membuka file yang sama dua kali, tetapi saya menemukan ini aneh).
Aspek penting berikutnya adalah kontrol sumber dan penggabungan. Dengan menjaga kelas Anda terpisah, Anda menghindari banyak kerumitan ketika perubahan ke file yang sama dibuat karena kelas yang terpisah perlu diubah.
Agar jujur, jangan menambahkan lebih dari satu kelas root ke file. Di pekerjaan terakhir saya, ada file dengan tidak hanya beberapa kelas, tetapi beberapa ruang nama dan ini membentang ke ribuan baris kode. Sangat sulit untuk diikuti.
Jika ada kelas yang terkait erat, maka beri nama file mereka sama atau menempatkannya di subfolder.
Pemisahan fisik file kelas membantu (perhatikan, bukan yang terakhir semua) menimbulkan pemisahan kekhawatiran dan penggabungan yang lebih longgar.
Di sisi lain, contoh Anda tidak menampilkan lebih dari satu kelas root. Ada beberapa kelas bersarang (catatan: cobalah untuk tidak membuat kelas bersarang apa pun tetapi
private
jika Anda dapat mendesain ini) dan ini sangat baik untuk dimiliki dalam satu file.sumber
Jika file sangat kohesif, misalnya di mana itu merupakan alternatif untuk memiliki beberapa file yang sangat pendek, dengan nama yang sama, maka itu bisa menjadi ide yang baik.
Sebagai contoh, saya menemukan bahwa ketika menggunakan Fluent NHibernate lebih mudah jika saya menyimpan
Entity
danEntityMap
dalam satu file, terlepas dari apa yang mungkin dikatakan alat saya tentang hal itu.Dalam kebanyakan kasus, itu hanya membuat kelas lebih sulit ditemukan. Gunakan hemat dan dengan hati-hati.
sumber
Sederhananya ya, itu bentuk yang tidak baik untuk melakukan ini dan saya akan memberitahu Anda mengapa, sedikit kemudian ketika solusi Anda menjadi besar Anda akan lupa di mana kelas-kelas sebagai nama file tidak akan lagi mewakili apa isinya, apa nama file AnimalPersonObject.cs itu tidak layak.
Tentu Anda dapat menyiasatinya dengan menggunakan fitur-fitur pada alat-alat seperti resharper untuk melompat ke tipe, tetapi 1 kelas per file (termasuk antarmuka) benar-benar merupakan tulang punggung dari setiap standar kode yang pernah saya lihat, tidak hanya di .net tetapi juga di java dan c ++ dan banyak bahasa lain, yang tidak sering mengalami masalah pemeliharaan dan Anda akan menemukan para dev junior kesulitan memahami kode.
Hampir semua alat pengoptimalan kode akan memberitahu Anda untuk memindahkan kelas ke file terpisah, jadi bagi saya ya ini adalah bau kode dan perlu beberapa alasan untuk menetralkannya :)
sumber
Masalah lain adalah bahwa dengan kelas yang sangat besar dan serupa di file yang sama - ketika Anda tidak dapat melihat deklarasi kelas setiap saat - Anda mungkin akhirnya menempatkan breakpoints di kelas yang salah dan bertanya-tanya mengapa mereka tidak tertabrak ... Grrr! :)
sumber
Pada dasarnya, jika Anda hanya perlu menggunakan kelas ini dari dalam kelas "induk" (dalam hal cakupan), maka biasanya tepat untuk mendefinisikannya sebagai kelas bersarang.
sumber