tôi sẽ mở rộng một chút về nhận xét của tôi, mà đọc:
Tôi vừa mới bắt đầu sử dụng Lazy, và thấy rằng nó thường biểu hiện thiết kế xấu; hoặc lười biếng trên một phần của lập trình viên. Ngoài ra, một trong những bất lợi là bạn phải cảnh giác hơn với các biến số được tạo thành và tạo các bao đóng phù hợp.
Ví dụ, tôi đã sử dụng Lazy<T>
để tạo ra các trang mà người dùng có thể nhìn thấy trong tôi (sessionless) MVC ứng dụng. Đó là một hướng dẫn hướng dẫn, vì vậy người dùng có thể muốn đi đến một bước ngẫu nhiên trước đó. Khi bắt tay được thực hiện, một mảng của các đối tượng Lazy<Page>
bị đóng và nếu người dùng chỉ định là bước, thì trang chính xác đó được đánh giá. Tôi thấy nó mang lại hiệu năng tốt, nhưng có một số khía cạnh để nó mà tôi không thích, ví dụ nhiều foreach
cấu trúc của tôi bây giờ trông như thế này:
foreach(var something in somethings){
var somethingClosure = something;
list.Add(new Lazy<Page>(() => new Page(somethingClosure));
}
Tức là bạn phải đối phó với vấn đề đóng cửa rất chủ động. Nếu không, tôi không nghĩ đó là một màn trình diễn tồi tệ để lưu trữ một lambda và đánh giá nó khi cần thiết. Mặt khác, điều này có thể là dấu hiệu cho thấy lập trình viên đang là Lazy<Programmer>
, theo nghĩa là bạn không muốn suy nghĩ qua chương trình của mình ngay bây giờ, và thay vào đó hãy để logic thích hợp đánh giá khi cần, như ví dụ trong ví dụ của tôi trường hợp - thay vì xây dựng mảng đó, tôi chỉ có thể tìm ra những gì mà trang yêu cầu cụ thể đó sẽ là; nhưng tôi đã chọn lười biếng, và làm một cách tiếp cận tất cả.
EDIT
Nó xảy ra với tôi rằng Lazy<T>
cũng có một vài peculiars khi làm việc với đồng thời. Ví dụ: có ThreadLocal<T>
đối với một số tình huống và một số cấu hình cờ cho trường hợp đa luồng cụ thể của bạn. Bạn có thể đọc thêm trên msdn.
Tôi vừa mới bắt đầu sử dụng Lazy và thấy rằng nó thường mang tính chất thiết kế xấu; hoặc lười biếng trên một phần của lập trình viên. Ngoài ra, một trong những bất lợi là bạn phải thận trọng hơn với các biến scoped lên, và tạo ra đóng cửa thích hợp. –
Gleno
@Gleno Tại sao chính xác sự lười biếng của lập trình viên này? –
@Gleno, Anton: Và quan trọng hơn, tại sao nó lại tệ? Tôi luôn dạy trong các lớp lập trình của tôi rằng sự lười biếng là một nhân tố quan trọng trong lập trình viên. –