Я голосовал за принятый ответ и с этим согласны - однако, возможно, я дам вам то, чтобы рассмотреть?
Не возвращайте коллекцию напрямую. Создайте точно названный бизнес-логический класс, который отражает цель коллекции.
Главное преимущество этого заключается в том, что вы не можете добавлять код в коллекцию, поэтому всякий раз, когда у вас есть собственная «коллекция» в вашей объектной модели, вы ВСЕГДА имеете код поддержки, отличный от OO, в вашем проекте для доступа Это.
Например, если в вашей коллекции были выставлены счета, у вас, вероятно, было бы 3 или 4 места в вашем коде, где вы повторили бы неоплаченные счета-фактуры. У вас может быть метод getUnpaidInvoices. Однако реальная власть приходит, когда вы начинаете думать о таких методах, как «payUnpaidInvoices (плательщик, учетная запись)».
Когда вы отправляете коллекцию вместо написания объектной модели, целые классы рефакторинга вам никогда не придут.
Обратите внимание, что это делает вашу проблему особенно приятной. Если вы не хотите, чтобы люди меняли коллекции, в вашем контейнере не должно быть мутаторов. Если вы решите позже, что в одном случае вы действительно должны его изменить, вы можете создать безопасный механизм для этого.
Как решить эту проблему, когда вы проходите вокруг родной коллекции?
Кроме того, собственные коллекции не могут быть дополнены дополнительными данными. Вы узнаете это в следующий раз, когда обнаружите, что вы проходите (Collection, Extra) более чем на один или два метода. Он указывает, что «Экстра» принадлежит объекту, содержащему вашу коллекцию.
Возможно, вы также захотите увидеть [readonlycollection-or-ienumerable-for-exposing-members-collections /] (http://stackoverflow.com/questions/491375/readonlycollection-or-ienumerable-for-exposing-member- коллекции/491591 # 491591) – nawfal 2013-11-11 11:02:39