Gần đây tôi đã viết một số đối tượng có thể tuần tự hóa cũng có giao dịch với logic cụ thể và có vòng đời cụ thể. Để cho nó hoạt động đúng, nó phải được khởi tạo với một hàm tạo thích hợp, có các đối số bắt buộc. Tuy nhiên, đối với các mục đích tuần tự hóa, tôi cũng phải thêm một hàm tạo mặc định công khai.Sử dụng thuộc tính [Lỗi thời] để hướng dẫn các nhà phát triển không sử dụng các phần của API
Đối tượng sẽ được API công khai và các nhà phát triển bên thứ ba của chúng tôi có thể khởi tạo và sử dụng nó. Mặc dù sẽ có một tài liệu thích hợp để làm thế nào để thao tác chính xác với đối tượng đó, nó không đảm bảo rằng ai đó sẽ bị cám dỗ sử dụng hàm tạo không chính xác - và sau đó gặp rắc rối.
Tôi đang tìm một cách gọn gàng để áp dụng một số hướng dẫn trong khi các nhà phát triển bên thứ ba đang viết mã của họ. Thuộc tính Obsolete
đến với tâm trí của tôi - tôi có thể chú thích hàm tạo dựng tuần tự với một chú thích thích hợp dưới dạng tin nhắn. Thông báo sau đó sẽ xuất hiện trong các cảnh báo đầu ra và hướng nhà phát triển đến đúng dòng mã. Ngoài ra, việc sử dụng hàm tạo sẽ được đánh dấu thích hợp bởi cả Visual Studio và bất kỳ phần bổ sung kiểm tra mã nào được sử dụng.
Điều làm phiền tôi trong cách tiếp cận này là mục đích của thuộc tính Obsolete
hoàn toàn khác. Đó là ý nghĩa ngữ nghĩa là mục trang trí không được chấp nhận và có thể sẽ bị xóa trong các phiên bản tiếp theo. Trong kịch bản tạo dựng tuần tự, điều này là sai, và sẽ có sự khác biệt giữa cách sử dụng và ý nghĩa của thuộc tính này. Chưa kể tùy chọn "xử lý cảnh báo dưới dạng lỗi" có thể được bật trong một số phòng ban phát triển ...
Vì vậy, câu hỏi là - đó có phải là một thực tiễn có thể chấp nhận cho việc sử dụng thuộc tính đó không? Có cách nào khác hợp pháp và phổ quát để đạt được hiệu quả tương tự (bằng cách phổ quát tôi có nghĩa là không dựa vào tiện ích kiểm tra mã bên thứ 3 và vv - Tôi không kiểm soát ai sử dụng mã và thiết lập của họ) là gì?
Liên quan đến nhận xét trong câu trả lời bên dưới, (tôi vẫn hữu ích), tôi phải làm rõ rằng tôi đang sử dụng hàm tạo mặc định được bảo vệ trên lớp kế thừa. Hàm khởi tạo có hỗ trợ tuần tự hóa XML, nhưng không nên được sử dụng để khởi tạo lớp trong logic nghiệp vụ. Các lớp kế thừa nên gọi một số các hàm tạo cơ sở khác và các nhà phát triển viết các lớp thừa kế cần biết điều đó. Tuy nhiên, các nhà phát triển bắt nguồn từ mã này cũng phải có phương tiện để kích hoạt tuần tự hóa XML cho các lớp kế thừa của họ nếu cần.
Nó không hoàn toàn giống nhau, nhưng việc sử dụng [EditorBrowsable (EditorBrowsableState.Never)] sẽ ẩn hàm khởi tạo khỏi intellisense để ngăn chặn một nhà phát triển nhận nó như một gợi ý và sử dụng nó một cách sai lầm mà không kiểm tra tài liệu. – fsimonazzi
@fsimonazzi, cảm ơn thông tin hữu ích. Trong cùng một thời trang không ai có thể ngăn chặn một thành viên lỗi thời bị truy cập bởi mã người dùng, vì vậy đề xuất của bạn là khá hợp lệ và nhiều hơn nữa tại chỗ. –