Vì vậy, nó là một giải pháp tạm thời? Sau đó, sử dụng tên được đề xuất bởi người đánh giá, nhưng đánh dấu phương thức là lỗi thời, để sử dụng nó sẽ tạo ra một cảnh báo mỗi khi ai đó biên dịch mã.
Nếu không, bạn luôn có thể nói rằng 216147
không có ý nghĩa gì trong mã, vì mã không được liên kết với hệ thống theo dõi lỗi (đúng hơn là hệ thống theo dõi lỗi được liên kết với kiểm soát nguồn). Mã nguồn không phải là nơi tốt để tham khảo các vé và phiên bản lỗi, và nếu bạn thực sự cần đặt các tài liệu tham khảo đó, hãy thực hiện nó trong các bình luận.
Lưu ý rằng ngay cả trong các bình luận, chỉ riêng số lỗi không có giá trị. Hãy tưởng tượng bình luận sau đây:
public IEnumerable<Report> FindReportsByDateOnly(DateTime date)
{
// The following method replaces FindReportByDate, because of the bug 8247 in the
// reporting system.
var dateOnly = new DateTime(date.Year, date.Month, date.Day);
return this.FindReportByDate(dateOnly);
}
private IEnumerable<Report> FindReportsByDate(DateTime date)
{
Contract.Requires(date.Hour == 0);
Contract.Requires(date.Minute == 0);
Contract.Requires(date.Second == 0);
// TODO: Do the actual work.
}
Hãy tưởng tượng rằng mã được viết cách đây mười năm, rằng bạn vừa tham gia dự án và khi bạn hỏi bạn có thể tìm thấy bất kỳ thông tin nào về lỗi 8247, các đồng nghiệp của bạn nói rằng có một danh sách các lỗi trên trang web của phần mềm hệ thống báo cáo, nhưng trang web đã được làm lại năm năm trước và danh sách các lỗi mới có số lượng khác nhau.
Kết luận: bạn không biết lỗi này là gì.
Mã tương tự có thể đã được viết theo một cách hơi khác:
public IEnumerable<Report> FindReportsByDateOnly(DateTime date)
{
// The reporting system we actually use is buggy when it comes to searching for a report
// when the DateTime contains not only a date, but also a time.
// For example, if looking for reports from `new DateTime(2011, 6, 9)` (June 9th, 2011)
// gives three reports, searching for reports from `new DateTime(2011, 6, 9, 8, 32, 0)`
// (June 9th, 2011, 8:32 AM) would always return an empty set (instead of isolating the
// date part, or at least be kind and throw an exception).
// See also: http://example.com/support/reporting-software/bug/8247
var dateOnly = new DateTime(date.Year, date.Month, date.Day);
return this.FindReportsByDate(dateOnly);
}
private IEnumerable<Report> FindReportsByDate(DateTime date)
{
Contract.Requires(date.Hour == 0);
Contract.Requires(date.Minute == 0);
Contract.Requires(date.Second == 0);
// TODO: Do the actual work.
}
Bây giờ bạn có một cái nhìn rõ ràng về vấn đề. Ngay cả khi có vẻ như liên kết siêu văn bản ở cuối bình luận đã chết năm năm trước, điều đó không thành vấn đề, vì bạn vẫn có thể hiểu tại sao FindReportsByDate
được thay thế bởi FindReportsByDateOnly
.