Không.
Tôi đã thử cả hai phương pháp cho các dự án nhỏ và lớn, cả với một (tôi) và một nhóm các nhà phát triển.
Tôi thấy con đường đơn giản và hiệu quả nhất là có một không gian tên cho mỗi dự án và tất cả các lớp đi vào không gian tên đó. Sau đó, bạn có thể tự do đặt các tệp lớp vào bất kỳ thư mục dự án nào bạn muốn. Không có gì lộn xộn về việc thêm bằng cách sử dụng các câu lệnh ở đầu tệp mọi lúc vì chỉ có một không gian tên duy nhất.
Điều quan trọng là tổ chức các tệp nguồn vào các thư mục và theo tôi đó là tất cả các thư mục nên được sử dụng cho. Yêu cầu các thư mục này cũng ánh xạ tới các không gian tên là không cần thiết, tạo ra nhiều công việc hơn và tôi thấy thực sự có hại cho tổ chức vì gánh nặng thêm khuyến khích sự vô tổ chức.
Lấy cảnh báo FxCop này làm ví dụ:
CA1020: Tránh các không gian tên với một vài loại
nguyên nhân: Một không gian tên khác với không gian tên toàn cầu chứa ít hơn năm loại
https://msdn.microsoft.com/en-gb/l Library / ms182130.aspx
Cảnh báo này khuyến khích việc đổ các tệp mới vào thư mục Project.General chung hoặc thậm chí là gốc dự án cho đến khi bạn có bốn lớp tương tự để biện minh cho việc tạo thư mục mới. Điều đó sẽ bao giờ xảy ra?
Tìm tập tin
Câu trả lời được chấp nhận cho biết "Các lớp sẽ dễ tìm hơn và đó là lý do đủ tốt."
Tôi nghi ngờ câu trả lời đề cập đến việc có nhiều không gian tên trong một dự án không ánh xạ đến cấu trúc thư mục, hơn là những gì tôi đang đề xuất đó là một dự án có một không gian tên duy nhất.
Trong mọi trường hợp trong khi bạn không thể xác định thư mục nào chứa tệp từ không gian tên, bạn có thể tìm thấy nó bằng cách sử dụng Chuyển đến Định nghĩa hoặc hộp trình khám phá giải pháp tìm kiếm trong Visual Studio. Ngoài ra, đây không thực sự là một vấn đề lớn trong quan điểm của tôi. Tôi không dành thậm chí 0,1% thời gian phát triển của mình cho vấn đề tìm tệp để biện minh cho việc tối ưu hóa nó.
Tên đụng độ
Chắc chắn tạo nhiều không gian tên cho phép dự án có hai lớp có cùng tên. Nhưng đó có thực sự là một điều tốt? Có lẽ dễ dàng hơn là không cho phép điều đó là có thể? Việc cho phép hai lớp có cùng tên sẽ tạo ra một tình huống phức tạp hơn trong đó 90% thời gian mọi thứ hoạt động theo một cách nhất định và sau đó đột nhiên bạn thấy bạn có một trường hợp đặc biệt. Giả sử bạn có hai lớp Hình chữ nhật được định nghĩa trong các không gian tên riêng biệt:
- lớp Project1.Image. Hình chữ nhật
- lớp Project1.Window. Hình chữ nhật
Có thể gặp phải một vấn đề mà tệp nguồn cần bao gồm cả hai không gian tên. Bây giờ bạn phải viết ra không gian tên đầy đủ ở mọi nơi trong tệp đó:
var rectangle = new Project1.Window.Rectangle();
Hoặc gây rối với một số tuyên bố khó chịu bằng cách sử dụng:
using Rectangle = Project1.Window.Rectangle;
Với một không gian tên duy nhất trong dự án của bạn, bạn buộc phải đưa ra các tên khác nhau và tôi sẽ tranh luận nhiều hơn về các tên như thế này:
- lớp Project1.ImageR chữ nhật
- lớp Project1.WindowR chữ nhật
Và việc sử dụng là như nhau ở mọi nơi, bạn không phải đối phó với trường hợp đặc biệt khi một tệp sử dụng cả hai loại.
sử dụng báo cáo
using Project1.General;
using Project1.Image;
using Project1.Window;
using Project1.Window.Controls;
using Project1.Shapes;
using Project1.Input;
using Project1.Data;
đấu với
using Project1;
Dễ dàng không phải thêm không gian tên mọi lúc trong khi viết mã. Đó không phải là thời gian thực sự, đó là sự gián đoạn của việc phải làm điều đó và chỉ cần lấp đầy các tệp với nhiều câu lệnh sử dụng - để làm gì? Nó có đáng không?
Thay đổi cấu trúc thư mục dự án
Nếu các thư mục được ánh xạ tới các không gian tên thì đường dẫn thư mục dự án được mã hóa cứng vào mỗi tệp nguồn. Điều này có nghĩa là bất kỳ việc đổi tên hoặc di chuyển tệp hoặc thư mục trong dự án đều yêu cầu nội dung tệp thực tế phải thay đổi. Cả khai báo không gian tên của các tệp trong thư mục đó và sử dụng các câu lệnh trong toàn bộ các tệp khác tham chiếu các lớp trong thư mục đó. Mặc dù các thay đổi là không đáng kể với công cụ, nhưng nó thường dẫn đến một cam kết lớn bao gồm nhiều tệp mà các lớp thậm chí không thay đổi.
Với một không gian tên duy nhất trong dự án, bạn có thể thay đổi cấu trúc thư mục dự án theo cách bạn muốn mà không cần bất kỳ tệp nguồn nào được sửa đổi.
Visual Studio tự động ánh xạ không gian tên của một tệp mới vào thư mục dự án mà nó được tạo trong
Thật không may, nhưng tôi thấy rắc rối của việc sửa không gian tên ít hơn rắc rối khi xử lý chúng. Ngoài ra, tôi có thói quen sao chép một tập tin hiện có thay vì sử dụng Thêm-> Mới.
Trình duyệt đối tượng và Intellisense
Theo tôi, lợi ích lớn nhất của việc sử dụng nhiều không gian tên trong các dự án lớn là có thêm tổ chức khi xem các lớp trong bất kỳ công cụ nào hiển thị các lớp trong hệ thống phân cấp không gian tên. Ngay cả tài liệu. Rõ ràng chỉ có một không gian tên trong dự án sẽ dẫn đến tất cả các lớp được hiển thị trong một danh sách thay vì được chia thành các danh mục. Tuy nhiên, cá nhân tôi chưa bao giờ bị bối rối hoặc trì hoãn vì thiếu điều này vì vậy tôi không thấy đó là một lợi ích đủ lớn để biện minh cho nhiều không gian tên.
Mặc dù nếu tôi đang viết một thư viện lớp công cộng lớn thì có lẽ tôi sẽ sử dụng nhiều không gian tên trong dự án để tập hợp trông gọn gàng trong công cụ và tài liệu.