คลาส, enums และเอนทิตีอื่น ๆ ควรอยู่ในไฟล์แยกกันหรือไม่?


12

หัวหน้าทีมของ บริษัท ของฉัน \ สถาปนิกระบุว่าโครงการขนาดใหญ่นั้นง่ายต่อการเข้าใจหากวางเอนทิตีที่เชื่อมต่อด้วยตรรกะไว้ในไฟล์. cs หนึ่งไฟล์

ฉันพูด:

  • "โครงสร้างทั้งหมดของลอจิกและอินเตอร์เฟสและคลาสสามารถเห็นได้ในที่เดียวนี่คืออาร์กิวเมนต์ที่ไม่สามารถหักล้างได้เมื่อต้องการดูสิ่งเดียวกัน แต่ด้วยไฟล์จำนวนมากคุณต้องใช้เครื่องมือ ไดอะแกรม R # สำหรับการนำทาง ฯลฯ "

  • "ตามทฤษฎีที่ไม่ดีฉันอาจกรีดร้องว่ากองทัพของไฟล์ที่แยกกันนั้นเจ๋ง แต่เมื่อพูดถึงการเปลี่ยนแปลงโค้ดที่มีอยู่โดยเฉพาะอย่างยิ่งถ้าคุณไม่ใช่นักเขียนของรหัสนี้มันยากมากที่จะเข้าใจไฟล์ที่กระจัดกระจาย ดังนั้นในฟอรัมคุณสามารถเขียนว่า "หนึ่ง enum - one file" แต่ในทางปฏิบัติไม่ควรใช้วิธีนี้ "

  • "... สำหรับการแยกรหัสฐานระหว่างนักพัฒนาทุกวันนี้มันไม่ใช่ปัญหาในการแก้ไขไฟล์เดียวกันพร้อม ๆ กันการผสานไม่ใช่ปัญหา"

ฉันได้ยินและอ่านหลาย ๆ ครั้งที่เราต้องสร้างหนึ่งไฟล์. cs ต่อ enum คลาสและอื่น ๆ และนี่คือวิธีปฏิบัติที่ดีที่สุด

แต่ฉันไม่สามารถโน้มน้าวเขาได้ เขาบอกว่าเขาไม่เชื่อใจโปรแกรมเมอร์ที่รู้จักกันดีเช่น Jon Skeet ความเห็นของ Skeet ในหัวข้อนี้เป็นที่ที่ดีที่สุดในการค้นหาประเภท enum อยู่ที่ไหน

คุณคิดอย่างไร? มีปัญหาจริงเหรอ? หรือมันเป็นเรื่องของรสนิยมและควรถูกควบคุมโดยมาตรฐานการเข้ารหัสขององค์กร?


คุณไม่สามารถชนะได้ทั้งหมดแม้ในขณะที่เล่นการ์ด Skeet
JeffO

6
ในความเป็นธรรมการเรียกร้องของ Jon Skeet ที่มีชื่อเสียงไม่ได้เป็นช่างฝีมือที่ยอดเยี่ยม แต่ก็เต็มใจและสามารถตอบคำถาม C # ได้อย่างรวดเร็วและแม่นยำ (และเขาก็เขียนหนังสือ) และอาจไม่เคยหลับแม้จะเป็นข่าวลือเท่านั้น ความเห็นของเขาเกี่ยวกับเรื่องนี้เพียงอย่างเดียวไม่เพียงพอ ไม่ได้หมายความว่าเขาผิดในกรณีนี้ฉันแค่บอกว่าผู้อาวุโสของคุณมีสิทธิ์ที่จะพูดว่า "มาหาฉันพร้อมข้อเท็จจริงและเหตุผลไม่ใช่ความคิดเห็น"
pdr

2
ฉันลงคะแนนสำหรับหนึ่งคลาสต่อไฟล์และ enums หรืออินเทอร์เฟซใด ๆ ที่เกี่ยวข้องเฉพาะกับคลาสนั้นควรอยู่ในชั้นเรียนไม่ใช่ภายในไฟล์เท่านั้น บนมืออื่น ๆ คุณควรปฏิบัติตามมาตรฐานการเข้ารหัสของ บริษัท ฯ ว่าไม่มีเหตุผลที่มันอาจจะไม่เพราะที่เป็นส่วนหนึ่งของการเขียนโค้ดที่ดีสำหรับงานของคุณ
Bobson

2
คุณสามารถชี้ให้เห็นว่า StyleCop เป็นปลั๊กอินของ Visual Studio มีคำเตือนหากมี> 1 คลาสต่อไฟล์
Kevin

คำตอบ:


20

มีข้อบกพร่องสองสามอย่างในการโต้แย้งของหัวหน้าทีมของคุณ:

  1. คลาสและ enums ที่ออกแบบมาอย่างดีมีจุดประสงค์เพื่อใช้ที่ใดก็ได้ในโครงการของคุณไม่ใช่แค่ในที่ที่พวกเขาอาจมีเหตุผล

  2. คลาสและ enums ที่มีการจัดทำเอกสารอย่างเหมาะสมพร้อมกับความคิดเห็นของ XML นั้นอธิบายตนเองได้มากโดยเพียงวางเมาส์เหนือรายการที่อ้างอิง

  3. คุณก็จะได้รับการกำหนดระดับหรือ enum โดยการคลิกขวาที่อ้างอิงและเลือก "ไปที่ความหมาย" ดังนั้นจึงไม่ควรเป็นเรื่องที่คุณวางไว้

  4. การวางวัตถุเข้าด้วยกันในแบบ "ตรรกะ" เป็นสิ่งที่ไม่มีเหตุผล (เช่นคุณต้องคิดว่า "ตรรกะ" หมายถึงอะไรฉันต้องการใช้เวลากับวงจรนาฬิกาเหล่านั้นในการเขียนโปรแกรมจริง)

การตั้งค่าคำจำกัดความของวัตถุแต่ละรายการในไฟล์ของตัวเองจะสร้างความคาดหวังที่มีระเบียบแบบแผนขององค์กรและโครงสร้างและไม่ตั้งคำถามเช่น "เหตุใดจึงเป็นเช่นนี้" นั่นเป็นสิ่งที่ดีมากที่จะมี

หากวัตถุสองรายการขึ้นไปมีความสัมพันธ์เชิงตรรกะเพียงแค่วางวัตถุเหล่านั้นไว้ในโฟลเดอร์ของตัวเองใน Project Explorer


5
ในบันทึกอื่น ๆ การผสานรหัสดูด แน่นอนว่าคุณสามารถทำได้ แต่ทำไมถ้าคุณไม่ต้องทำ
Robert Harvey

4

เป็นไปได้ว่าทีมนำจะตัดฟันของเขาในยุคก่อนหน้าเมื่อคลิกขวาและเลือก "ไปที่คำจำกัดความ" ไม่ใช่ตัวเลือก ฉันรู้ว่าเมื่อฉันอยู่ในโหมดการพัฒนาที่หนักหน่วงฉันจะสร้างไฟล์คลาสที่ใหญ่โตขึ้นเรื่อย ๆ จนกว่าฉันจะปล่อยให้ resharper แก้ไขให้ฉัน

ไม่ว่าในกรณีใดถ้าคุณต้องการนำทีมไปสู่ภารกิจให้ถามเขาว่าทำไมคลาสและ enums เหล่านี้ไม่ใช่คลาสย่อยและ enums สำหรับเด็ก - ไม่มีเหตุผลที่จะประกาศว่าพวกเขาเป็นองค์กรอิสระ นี่อาจช่วยให้เขาคิดว่า fatwa ผ่านได้ซักพัก

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.