Мой любимый трюк с коллекциями - просто никогда не раздавать их. Если они существуют только внутри одного объекта, то сделать их неизменяемыми в большинстве случаев не имеет значения (если ваш содержащий объект не изменит их, они не будут изменены).
Обычно ваша коллекция представляет что-то, верно? Это коллекция собак или коллекция счетов ...
Обычно есть что-то, что вы можете сделать с коллекцией собак (Herd? Neuter?) Или коллекцией счетов (платно?). Практически всегда есть операции, которые применяются ко всему списку объектов - операции, которые имеют функциональность за исключением единственного invoice.pay () (например, гарантируя, что самые важные счета оплачиваются первыми), без класса вокруг вашей коллекции, на самом деле нет места для размещения этих операций.
Также обычно имеет смысл иметь несколько переменных, связанных с вашей коллекцией - и опять же, без оболочки, вы всегда в конечном итоге помещаете эти переменные в какое-то странное неестественное место.
Поначалу это может показаться странным, но попробуйте пару раз, прежде чем судить.