Trong một thế giới lý tưởng, các phiên bản mới sẽ giới thiệu chức năng bổ sung trong khi vẫn còn 100% khả năng tương thích ngược với các phiên bản API trước. Thật không may, thế giới lý tưởng vẫn còn khó nắm bắt, và nó không phải là luôn luôn có thể giữ lại khả năng tương thích ngược hoàn toàn. Hậu tố được phiên bản là mẫu thích hợp trong trường hợp này.
Quy ước đặt tên .NET tiêu chuẩn là sử dụng đánh số gia tăng, như Class
, Class2
, Class3
, v.v. Điều này xuất phát từ quy ước đặt tên cho giao diện COM, được thiết kế cho chính xác trường hợp sử dụng bạn mô tả.Ví dụ: giao diện IHTMLDocument
hiện có 8 phiên bản, từ IHTMLDocument
lên đến IHTMLDocument8
.
Các Framework Design Guidelines sổ gốc, bởi Cwalina và Abrams, một cách rõ ràng khuyến khích thực hành này, với các tác giả có cho biết:
DO sử dụng một hậu tố số để chỉ ra một phiên bản mới của API hiện có, nếu tên hiện tại của API là tên duy nhất có ý nghĩa (nghĩa là, nó là một tiêu chuẩn công nghiệp), và thêm bất kỳ hậu tố có ý nghĩa (hoặc thay đổi tên) không phải là một lựa chọn thích hợp.
// old API
[Obsolete("This type is obsolete. Please use the new version of the same class, X509Certificate2."]
public class X509Certificate { ... }
// new API
public class X509Certificate2 { ... }
Quy ước cũ, tiếp theo là nhóm Windows ban đầu, là để thêm các hậu tố Ex
với các phiên bản cải tiến mới-và-một API, mà xuất phát từ chữ "mở rộng". Tuy nhiên, điều này không có quy mô tốt, dẫn đến các hàm bị nhầm lẫn là ExEx
. Tôi không nghĩ có một số ExExEx
; mọi người sợ phải chạm vào các API đó. Các Khung Thiết kế Hướng dẫn khuyên rõ ràng chống thực tế này, các folks người đã đi vào kiến trúc sư NET đã học được bài học của họ:
KHÔNG sử dụng "Ex" (hoặc tương tự) hậu tố cho một số nhận dạng để phân biệt với phiên bản cũ hơn của cùng một API.
[Obsolete("This type is obsolete. ..."]
public class Car { ... }
// new API
public class CarEx { ... } // the wrong way
public class CarNew { ... } // the wrong way
public class Car2 { ... } // the right way
public class Automobile { ... } // the right way
Rõ ràng, như gợi ý mẫu mã mới nhất của họ, nếu bạn đang thêm hỗ trợ cho một tính năng cụ trong phiên bản mới của API, bạn sẽ được giảm giá tốt nhất đặt tên cho lớp mới/giao diện với một tham chiếu đến tính năng cụ thể đó. Và mặc dù ở trên đã tập trung gần như độc quyền trên các lớp và giao diện, cùng một logic sẽ giữ đúng cho bất kỳ chức năng thành viên của lớp đó có thể được thêm vào trong các phiên bản sau này. Hàm ban đầu có thể giữ nguyên tên ban đầu của nó, với hàm mới được thêm có tên khác phản ánh sự lặp lại của nó hoặc chức năng được thêm vào của nó.
Không chắc chắn nếu có một quy ước đặt tên tồn tại cho điều này, nhưng tôi sẽ sử dụng 'MyClassVX' và đánh dấu những cái trước đó đã lỗi thời. – thijmen321
Người ta có thể tranh luận câu hỏi này chủ yếu dựa trên ý kiến, cũng như tất cả các câu hỏi về quy ước đặt tên. Có lẽ câu hỏi của bạn sẽ được tiếp nhận tốt hơn tại [programmers.stackexchange.com] (http://programmers.stackexchange.com)? –