Các lớp, enum và các thực thể khác nên được đặt trong các tệp riêng biệt?


12

Trưởng nhóm \ kiến ​​trúc sư của công ty tôi lập luận rằng một dự án quy mô lớn sẽ dễ hiểu hơn nếu "các thực thể được kết nối bằng logic" được đặt trong một tệp .cs.

Tôi trích dẫn:

  • "Toàn bộ cấu trúc của logic và giao diện và lớp có thể được nhìn thấy ở một nơi, đây là một đối số không thể bác bỏ. Để thấy điều tương tự nhưng với một loạt các tệp bạn cần sử dụng các công cụ, lớp sơ đồ, R # để điều hướng, v.v. "

  • "Theo lý thuyết nghèo nàn, tôi có thể hét lên rằng một đội quân các tệp riêng biệt rất tuyệt, nhưng khi thực hiện thay đổi mã hiện có, đặc biệt nếu bạn không phải là người viết mã này, rất khó để hiểu nhiều tệp bị phân tán. Vì vậy, trên các diễn đàn, bạn có thể viết rằng "một enum- một tệp", nhưng trong thực tế phương pháp này không bao giờ nên được sử dụng "

  • "... Về việc phân tách cơ sở mã giữa các nhà phát triển, ngày nay không phải là vấn đề chỉnh sửa đồng thời cùng một tệp. Việc hợp nhất không phải là vấn đề."

Tôi đã nghe và đọc nhiều lần rằng chúng ta phải tạo một tệp .cs cho mỗi enum, lớp và vv và đây là cách thực hành tốt nhất.

Nhưng tôi không thể thuyết phục anh ta. Anh ta nói rằng anh ta không tin tưởng vào bất kỳ lập trình viên nổi tiếng nào như Jon Skeet. Nhân tiện, đây là ý kiến ​​của Skeet về chủ đề này: Đâu là nơi tốt nhất để định vị các loại enum?

Bạn nghĩ sao? Có một vấn đề thực sự? Hay đó là vấn đề của hương vị và nên được quy định bởi tiêu chuẩn mã hóa của tổ chức?


Bạn không thể thắng tất cả, ngay cả khi bạn chơi Thẻ Skeet.
JeffO 18/03/13

6
Công bằng mà nói, Jon Skeet tuyên bố nổi tiếng không phải là một nghệ nhân mã xuất sắc, nó sẵn sàng và có thể trả lời các câu hỏi C # một cách nhanh chóng và chính xác (và ông đã viết cuốn sách theo nghĩa đen). Và có thể không bao giờ ngủ, mặc dù đây chỉ là một tin đồn. Ý kiến ​​của anh ta về điều này một mình là không đủ, và lập luận của anh ta không có một ý kiến ​​mạnh mẽ. Điều đó không có nghĩa là anh ta sai trong trường hợp này, tôi chỉ nói rằng tiền bối của bạn có quyền nói "hãy đến với tôi bằng sự thật và lý do chứ không phải ý kiến."
pdr

2
Tôi bỏ phiếu cho một lớp cho mỗi tệp và bất kỳ enum hoặc giao diện nào chỉ liên quan đến lớp đó sẽ nằm trong lớp, không chỉ bên trong tệp. Mặt khác, bạn nên tuân theo tiêu chuẩn mã hóa của công ty, bất kể nó có hợp lý đến mức nào, bởi vì đó là một phần của việc viết mã tốt cho công việc của bạn .
Bobson

2
Bạn có thể chỉ ra rằng StyleCop là một plugin Visual Studio có cảnh báo nếu có> 1 lớp cho mỗi tệp
Kevin

Câu trả lời:


20

Có một vài sai sót trong lập luận của Trưởng nhóm của bạn:

  1. Các lớp và enum được thiết kế tốt sẽ được sử dụng ở bất cứ đâu trong dự án của bạn, không chỉ là nơi chúng có thể có ý nghĩa về mặt logic.

  2. Các lớp và enum được ghi lại đúng bằng các nhận xét XML rất tự mô tả, bằng cách chỉ di chuột qua mục tham chiếu đến nó.

  3. Bạn luôn có thể đến một định nghĩa lớp hoặc enum bằng cách nhấp chuột phải vào tham chiếu và chọn "Chuyển đến Định nghĩa", vì vậy việc bạn đặt nó ở đâu thực sự không quan trọng .

  4. Đặt các đối tượng lại với nhau theo kiểu "logic" là tùy ý (nghĩa là bạn phải suy nghĩ về ý nghĩa của "logic". Tôi muốn sử dụng các chu kỳ đồng hồ đó để lập trình thực tế).

Thiết lập từng định nghĩa đối tượng trong tệp riêng của nó sẽ tạo ra một kỳ vọng thống nhất, có kỷ luật về tổ chức và cấu trúc và không đặt ra các câu hỏi như "tại sao lại ở đây?" Đó là một điều rất tốt đẹp để có.

Nếu hai hoặc nhiều đối tượng có liên quan đến logic, chỉ cần đặt chúng vào thư mục riêng của chúng trong Project Explorer.


5
Trên một lưu ý khác, mã hợp nhất hút. Chắc chắn, bạn có thể làm chúng, nhưng tại sao, nếu bạn không phải làm vậy?
Robert Harvey

4

Nhiều khả năng nhóm trưởng đã cắt răng trong thời kỳ sớm hơn khi nhấp chuột phải và chọn "đi đến định nghĩa" không phải là một lựa chọn. Tôi biết khi tôi ở chế độ phát triển đột biến nặng, tôi sẽ phát triển các tệp lớp khá lớn cho đến khi tôi cho phép chia sẻ lại sửa nó cho tôi.

Trong mọi trường hợp, nếu bạn muốn đưa nhóm dẫn đầu vào nhiệm vụ, hãy hỏi anh ta tại sao các lớp và enum này không phải là các lớp con và enum - không có lý do gì để tuyên bố chúng là các thực thể độc lập nếu chúng là các thực thể phụ thuộc thực sự. Điều này có thể giúp anh ấy nghĩ rằng fatwa thông qua một chút.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.