Tôi đã bình chọn cho câu trả lời về tiền mã hóa và tôi muốn mở rộng thêm một chút.
Gói các bộ sưu tập trong các lớp học là điều tôi luôn cố gắng thực hiện - quy tắc của tôi là "Không bao giờ vượt qua bộ sưu tập trần trụi". Thất bại lớn nhất của OO tôi từng thấy là khi mọi người sợ thêm phương thức nơi họ thuộc về. Trong trường hợp của bạn, các phương thức thuộc về bộ sưu tập (Hoàn toàn rõ ràng nếu bạn nghĩ về nó), vì vậy hãy đặt chúng ở đó bằng cách gói bộ sưu tập và để đóng băng trên bánh, chỉ hiển thị chức năng bạn cần bên ngoài lớp mới của bạn (như mã hóa đã làm) để bạn có thể nhìn vào lớp học nhỏ, đơn lẻ của mình và dễ dàng hiểu mọi thứ thao túng bộ sưu tập đó.
Bạn không phải giải quyết mọi vấn đề có thể xảy ra vì đó là tất cả mã của bạn, bạn có thể chỉnh sửa trình bao bọc bộ sưu tập dễ dàng như bạn có thể chỉnh sửa các lớp khác tương tác với nó. Điều này cho phép bạn kéo mã khác vào lớp khi cần thiết - nếu bạn không bao giờ để lộ bộ sưu tập, nó sẽ nhanh chóng trở nên rõ ràng mã nào thuộc về trình bao bọc.
Điều này cũng cung cấp cho bạn toàn quyền kiểm soát bộ sưu tập để bạn có thể ngăn không cho nó vào trạng thái không phù hợp với chức năng của nó (Ví dụ: nếu không có mục nào trong bộ sưu tập có thể là null, chỉ cần ngăn không cho bất kỳ ai đưa null vào!)
Hầu hết các mã OO xấu mà tôi từng thấy đã được tạo bởi vì ai đó đã chọn viết các tiện ích tĩnh hoặc mã nội tuyến thuộc về các đối tượng mà họ không thể thêm mã vào thay vì bọc các đối tượng vi phạm bằng mã của riêng họ mà họ có thể sửa đổi .