Câu hỏi rộng hơn:
Bạn đã bao giờ nghe nói về một tiêu chuẩn như vậy được áp đặt? Nếu vậy, lý do đằng sau nó là gì?
Có, tôi đã nghe nói về điều này và việc sử dụng tên đối tượng đủ điều kiện sẽ ngăn chặn xung đột tên. Mặc dù hiếm, nhưng khi chúng xảy ra, chúng có thể đặc biệt gai góc để tìm ra.
Một ví dụ:
Loại kịch bản đó có thể được giải thích tốt hơn với một ví dụ.
Hãy nói rằng chúng tôi có hai Lists<T>
thuộc hai dự án riêng biệt.
System.Collections.Generic.List<T>
MyCorp.CustomCollections.Optimized.List<T>
Khi chúng ta sử dụng tên đối tượng đủ điều kiện, rõ ràng là đối tượng List<T>
đang được sử dụng. Sự rõ ràng đó rõ ràng phải trả giá bằng sự dài dòng.
Và bạn có thể tranh luận, "Đợi đã! Không ai sẽ sử dụng hai danh sách như thế!" Đó là nơi tôi sẽ chỉ ra kịch bản bảo trì.
Bạn đã viết mô-đun Foo
cho công ty của bạn sử dụng công ty được phê duyệt, tối ưu hóa List<T>
.
using MyCorp.CustomCollections.Optimized;
public class Foo {
List<object> myList = ...;
}
Sau đó, một nhà phát triển mới quyết định mở rộng công việc bạn đang làm. Không nhận thức được các tiêu chuẩn của công ty, họ cập nhật using
khối:
using MyCorp.CustomCollections.Optimized;
using System.Collections.Generic;
Và bạn có thể thấy mọi thứ trở nên tồi tệ như thế nào một cách vội vàng.
Sẽ là tầm thường khi chỉ ra rằng bạn có thể có hai lớp độc quyền cùng tên nhưng trong các không gian tên khác nhau trong cùng một dự án. Vì vậy, nó không chỉ là mối quan tâm về việc va chạm với các lớp được cung cấp .NET framework.
MyCorp.WeightsAndLengths.Measurement();
MyCorp.TimeAndSpace.Measurement();
Thực tế:
Bây giờ, điều này có khả năng xảy ra trong hầu hết các dự án? Không thật sự lắm. Nhưng khi bạn đang làm việc trong một dự án lớn với nhiều đầu vào, bạn sẽ cố gắng hết sức để giảm thiểu khả năng mọi thứ bùng nổ trong bạn.
Các dự án lớn với nhiều nhóm đóng góp là một loại quái thú đặc biệt trong thế giới ứng dụng. Các quy tắc có vẻ không hợp lý cho các dự án khác trở nên phù hợp hơn do các luồng đầu vào cho dự án và khả năng những người đóng góp không đọc hướng dẫn của dự án.
Điều này cũng có thể xảy ra khi hai dự án lớn được hợp nhất với nhau. Nếu cả hai dự án có các lớp được đặt tên giống nhau, thì bạn sẽ thấy các xung đột khi bạn bắt đầu tham chiếu từ dự án này sang dự án khác. Và các dự án có thể quá lớn để tái cấu trúc hoặc ban quản lý sẽ không phê duyệt chi phí để tài trợ cho thời gian tái cấu trúc.
Lựa chọn thay thế:
Trong khi bạn không hỏi, thật đáng để chỉ ra rằng đây không phải là một giải pháp tuyệt vời cho vấn đề. Sẽ không phải là một ý tưởng tốt khi tạo các lớp sẽ va chạm mà không cần khai báo không gian tên của chúng.
List<T>
, đặc biệt, nên được coi là một từ dành riêng và không được sử dụng làm tên cho các lớp học của bạn.
Tương tự, các không gian tên riêng lẻ trong dự án nên cố gắng có các tên lớp duy nhất. Phải thử và nhớ lại không gian tên Foo()
mà bạn đang làm việc là vấn đề tinh thần tốt nhất nên tránh. Nói một cách khác: có MyCorp.Bar.Foo()
và MyCorp.Baz.Foo()
sẽ làm vấp ngã các nhà phát triển của bạn và tốt nhất nên tránh.
Nếu không có gì khác, bạn có thể sử dụng không gian tên một phần để giải quyết sự mơ hồ. Ví dụ: nếu bạn hoàn toàn không thể đổi tên một trong hai Foo()
lớp, bạn có thể sử dụng các không gian tên một phần của chúng:
Bar.Foo()
Baz.Foo()
Lý do cụ thể cho dự án hiện tại của bạn:
Bạn đã cập nhật câu hỏi của mình với những lý do cụ thể mà bạn đã đưa ra cho dự án hiện tại của mình theo tiêu chuẩn đó. Chúng ta hãy nhìn vào chúng và thực sự lạc đề xuống con đường mòn thỏ.
Thật khó khăn khi di chuột qua tên để có được loại đủ điều kiện. Tốt hơn là luôn luôn có loại đủ điều kiện hiển thị mọi lúc.
"Cồng kềnh, cản trở, vướng víu?" À, không. Có lẽ gây phiền nhiễu. Di chuyển một vài ounce nhựa để thay đổi con trỏ trên màn hình không cồng kềnh . Nhưng tôi lạc đề.
Dòng lý luận này có vẻ giống như một sự che đậy hơn bất cứ điều gì khác. Chính thức, tôi đoán rằng các lớp trong ứng dụng được đặt tên yếu và bạn phải dựa vào không gian tên để thu thập lượng thông tin ngữ nghĩa phù hợp xung quanh tên lớp.
Đây không phải là một bằng chứng hợp lệ cho các tên lớp đủ điều kiện, có lẽ đó là một bằng chứng hợp lệ cho việc sử dụng các tên lớp đủ điều kiện một phần.
Đoạn mã được gửi qua email không có tên đủ điều kiện và do đó có thể khó hiểu.
Dòng lý luận này (tiếp tục?) Củng cố sự nghi ngờ của tôi rằng các lớp học hiện được đặt tên kém. Một lần nữa, có tên lớp kém không phải là lý do chính đáng để yêu cầu mọi thứ sử dụng tên lớp đủ điều kiện. Nếu tên lớp khó hiểu, có nhiều sai lầm hơn những gì tên lớp đủ điều kiện có thể sửa.
Khi xem hoặc chỉnh sửa mã bên ngoài Visual Studio (chẳng hạn như Notepad ++), không thể có được tên loại đủ điều kiện.
Trong tất cả các lý do, điều này gần như khiến tôi nhổ nước uống của tôi. Nhưng một lần nữa, tôi lạc đề.
Tôi đang tự hỏi tại sao nhóm thường xuyên chỉnh sửa hoặc xem mã bên ngoài Visual Studio? Và bây giờ chúng ta đang xem xét một sự biện minh rằng nó trực giao khá tốt với những gì không gian tên được cung cấp. Đây là một đối số được hỗ trợ công cụ trong khi không gian tên ở đó để cung cấp cấu trúc tổ chức cho mã.
Nghe có vẻ như dự án của riêng bạn chịu các quy ước đặt tên kém cùng với các nhà phát triển, những người không tận dụng những gì công cụ có thể cung cấp cho họ. Và thay vì giải quyết những vấn đề thực tế đó, họ đã cố gắng tát một người trợ giúp ban nhạc cho một trong những triệu chứng và đang yêu cầu tên lớp đủ điều kiện. Tôi nghĩ thật an toàn khi phân loại đây là một cách tiếp cận sai lầm.
Cho rằng có các lớp được đặt tên kém và giả sử bạn không thể cấu trúc lại, câu trả lời đúng là sử dụng Visual Studio IDE để tận dụng tối đa lợi thế của nó. Có thể xem xét thêm vào một plugin như gói VS PowerTools. Sau đó, khi tôi nhìn vào AtrociouslyNamedClass()
tôi có thể nhấp vào tên lớp, nhấn F12 và được đưa thẳng đến định nghĩa của lớp để hiểu rõ hơn những gì nó đang cố gắng làm. Tương tự như vậy, tôi có thể nhấp Shift-F12 để tìm tất cả các điểm trong mã hiện đang phải sử dụng AtrociouslyNamedClass()
.
Liên quan đến các mối quan tâm công cụ bên ngoài - điều tốt nhất để làm là chỉ dừng lại. Đừng gửi email qua lại nếu họ không ngay lập tức xóa nội dung đề cập đến. Không sử dụng các công cụ khác bên ngoài Visual Studio vì các công cụ đó không có trí thông minh xung quanh mã mà nhóm của bạn cần. Notepad ++ là một công cụ tuyệt vời, nhưng nó không bị loại bỏ cho nhiệm vụ này.
Vì vậy, tôi đồng ý với đánh giá của bạn về ba biện minh cụ thể mà bạn đã được trình bày. Điều đó nói rằng, những gì tôi nghĩ rằng bạn đã nói là "Chúng tôi có những vấn đề tiềm ẩn trong dự án này mà không thể / không giải quyết và đây là cách chúng tôi 'sửa chữa' chúng." Và điều đó rõ ràng nói lên những vấn đề sâu sắc hơn trong đội có thể đóng vai trò là cờ đỏ cho bạn.