Trong đoạn mã sau:Tại sao trường này được khai báo là riêng tư và cũng chỉ đọc?
public class MovieRepository : IMovieRepository
{
private readonly IHtmlDownloader _downloader;
public MovieRepository(IHtmlDownloader downloader)
{
_downloader = downloader;
}
public Movie FindMovieById(string id)
{
var idUri = ...build URI...;
var html = _downloader.DownloadHtml(idUri);
return ...parse ID HTML...;
}
public Movie FindMovieByTitle(string title)
{
var titleUri = ...build URI...;
var html = _downloader.DownloadHtml(titleUri);
return ...parse title HTML...;
}
}
I asked for something to review my code, và ai đó đề nghị phương pháp này. Câu hỏi của tôi là tại sao biến IHtmlDownloader chỉ đọc?
Bingo. Nếu nó chỉ đọc, nó chỉ có thể được đặt bằng khởi tạo đối tượng hoặc trong hàm tạo. Nó không cần thiết, nhưng một phần của chất lượng mã đang hạn chế phạm vi trong đó một lỗi có thể xảy ra. –
Câu trả lời của Eric là tốt nhưng không có ý nghĩa cho đến khi Cylon nói rằng bạn chỉ có thể thay đổi một trường chỉ đọc trong khởi tạo và khởi tạo. Cảm ơn các bạn! –
Có một lợi ích bổ sung trong đó trình biên dịch và JITter có thể có hiệu lực tối ưu hóa nhất định biết giá trị sẽ được cố định sau khi xây dựng. –