Tôi đã bỏ phiếu cho câu trả lời chấp nhận và đồng ý với nó - tuy nhiên tôi có thể cung cấp cho bạn một cái gì đó để xem xét?
Không trả lại trực tiếp bộ sưu tập. Tạo một lớp logic kinh doanh được đặt tên chính xác phản ánh mục đích của bộ sưu tập.
Lợi thế chính của việc này là bạn không thể thêm mã vào bộ sưu tập để bất cứ khi nào bạn có một "bộ sưu tập" gốc trong mô hình đối tượng của mình, bạn luôn có mã hỗ trợ không phải OO trong toàn bộ dự án của mình để truy cập nó. Ví dụ:
Ví dụ: nếu bộ sưu tập của bạn là hóa đơn, bạn có thể có 3 hoặc 4 địa điểm trong mã mà bạn đã lặp qua các hóa đơn chưa thanh toán. Bạn có thể có phương thức getUnpaidInvoices. Tuy nhiên, sức mạnh thực sự xuất hiện khi bạn bắt đầu nghĩ về các phương thức như "payUnpaidInvoices (người thanh toán, tài khoản);".
Khi bạn vượt qua các bộ sưu tập thay vì viết một mô hình đối tượng, toàn bộ các lớp cấu trúc lại sẽ không bao giờ xảy ra với bạn.
Cũng lưu ý rằng điều này làm cho vấn đề của bạn đặc biệt tốt đẹp. Nếu bạn không muốn mọi người thay đổi bộ sưu tập, vùng chứa của bạn không cần có trình tắt. Nếu sau này bạn quyết định rằng chỉ trong một trường hợp bạn thực sự phải sửa đổi nó, bạn có thể tạo ra một cơ chế an toàn để làm như vậy.
Làm thế nào để bạn giải quyết vấn đề đó khi bạn đi qua một bộ sưu tập gốc?
Ngoài ra, không thể nâng cao bộ sưu tập gốc với dữ liệu bổ sung. Bạn sẽ nhận ra điều này trong lần tiếp theo bạn thấy rằng bạn chuyển vào (Collection, Extra) tới nhiều hơn một hoặc hai phương thức. Nó chỉ ra rằng "Extra" thuộc về đối tượng chứa bộ sưu tập của bạn.
Nguồn
2009-12-18 23:47:34
Bạn cũng có thể muốn xem [readonlycollection-or-ienumerable-for-exposing-member-collections /] (http://stackoverflow.com/questions/491375/readonlycollection-or-ienumerable-for-exposing-member- bộ sưu tập/491591 # 491591) – nawfal