Haruskah kelas, enum, dan entitas lain ditempatkan dalam file terpisah?

12

Pimpinan \ arsitek tim perusahaan saya berpendapat bahwa proyek skala besar lebih mudah dipahami jika "entitas yang terhubung oleh logika" ditempatkan dalam satu file .cs.

Saya mengutip:

  • "Seluruh struktur logika dan antarmuka dan kelas dapat dilihat di satu tempat, ini adalah argumen yang tidak dapat disangkal. Untuk melihat hal yang sama tetapi dengan banyak file Anda perlu menggunakan alat, kelas diagram, R # untuk navigasi, dll. "

  • "Mengikuti teori yang buruk saya mungkin berteriak bahwa sepasukan file yang terpisah itu keren, tetapi ketika datang untuk membuat perubahan pada kode yang ada, terutama jika Anda bukan penulis kode ini, sangat sulit untuk memahami banyak file yang tersebar. Jadi di forum, Anda dapat menulis "satu enum-file" itu, tetapi dalam praktiknya pendekatan ini tidak boleh digunakan "

  • "... Mengenai pemisahan basis kode antara pengembang, saat ini bukan masalah mengedit file yang sama secara bersamaan. Penggabungan bukan masalah."

Saya mendengar dan membaca berkali-kali bahwa kita harus membuat satu file .cs per enum, kelas dan seterusnya dan ini adalah praktik terbaik.

Tapi aku tidak bisa meyakinkannya. Dia mengatakan bahwa dia tidak percaya pada programmer terkenal seperti Jon Skeet. Ngomong-ngomong di sini adalah pendapat Skeet tentang topik ini: Di mana tempat terbaik untuk mencari tipe enum?

Bagaimana menurut anda? Apakah ada masalah nyata? Atau apakah ini masalah selera dan harus diatur oleh standar pengkodean organisasi?

EngineerSpock
sumber
Anda tidak dapat memenangkan semuanya, bahkan ketika Anda memainkan Kartu Skeet.
JeffO
6
Dalam keadilan, klaim Jon Skeet untuk ketenaran bukanlah menjadi pengrajin kode yang sangat baik, itu bersedia dan mampu menjawab pertanyaan C # dengan cepat dan akurat (dan dia benar-benar menulis buku itu). Dan mungkin tidak pernah tidur, meskipun ini hanya rumor. Pendapatnya tentang hal ini saja seharusnya tidak cukup, dan argumennya tidak ada yang kuat. Itu tidak berarti dia salah dalam hal ini, saya hanya mengatakan bahwa senior Anda memiliki hak untuk mengatakan "datang kepada saya dengan fakta dan alasan, bukan pendapat."
pdr
2
Saya memilih satu kelas per file, dan enum atau antarmuka apa pun yang hanya relevan dengan kelas itu harus berada di dalam kelas, bukan hanya di dalam file. Di sisi lain, Anda harus mengikuti standar pengkodean perusahaan, tidak peduli seberapa tidak masuk akalnya, karena itu bagian dari penulisan kode yang baik untuk pekerjaan Anda .
Bobson
2
Anda bisa menunjukkan bahwa StyleCop sebagai plugin Visual Studio memiliki peringatan jika ada> 1 kelas per file
Kevin

Jawaban:

20

Ada beberapa kelemahan dalam argumen Ketua Tim Anda:

  1. Kelas dan enum yang dirancang dengan baik dimaksudkan untuk digunakan di mana saja dalam proyek Anda, bukan hanya di tempat yang masuk akal.

  2. Kelas dan enum yang didokumentasikan dengan baik dengan komentar XML sangat menggambarkan dirinya sendiri, dengan hanya mengarahkan kursor ke item yang merujuknya.

  3. Anda selalu dapat masuk ke kelas atau definisi enum dengan mengklik kanan referensi dan memilih "Pergi ke Definisi," sehingga benar-benar tidak masalah di mana Anda meletakkannya.

  4. Menempatkan objek bersama-sama dalam mode "logis" adalah sewenang-wenang (yaitu Anda harus berpikir tentang apa yang "logis" artinya. Saya lebih suka menghabiskan siklus jam itu melakukan pemrograman aktual).

Menyiapkan setiap definisi objek dalam file sendiri menciptakan harapan seragam, disiplin organisasi dan struktur, dan tidak menimbulkan pertanyaan seperti "mengapa ini ada di sini?" Itu hal yang sangat bagus untuk dimiliki.

Jika dua atau lebih objek terkait secara logis, cukup letakkan di folder mereka sendiri di Project Explorer.

Robert Harvey
sumber
5
Pada catatan lain, penggabungan kode menyedot. Tentu, Anda bisa melakukannya, tetapi mengapa, jika Anda tidak harus melakukannya?
Robert Harvey
4

Kemungkinan besar pemimpin tim memotong giginya di era sebelumnya ketika mengklik kanan dan memilih "pergi ke definisi" bukan pilihan. Saya tahu ketika saya dalam mode pengembangan lonjakan berat saya akan menumbuhkan file kelas yang cukup besar sampai saya membiarkan resharper memperbaikinya untuk saya.

Bagaimanapun, jika Anda ingin memimpin tim ke tugas, tanyakan padanya mengapa kelas dan enum ini bukan kelas dan enum anak - tidak ada alasan untuk menyatakannya sebagai entitas independen jika mereka benar-benar entitas yang tergantung. Ini mungkin membantunya memikirkan fatwa sedikit.

Wyatt Barnett
sumber