Публикация коллекций - неплохая идея. Хотя инкапсулирующие поля важны в любом случае, коллекции еще важнее.
Сама коллекция, как правило, не является объектом, о котором вы действительно заботитесь. Таким образом, вызывающий абонент вашего класса не сможет его установить, заменить или удалить (скажем: установить на null
). Он должен заботиться только об элементах. Если вы позволите установить экземпляр списка извне, вы рискуете, что несколько экземпляров вашего класса имеют один и тот же экземпляр списка. Это будет иметь некоторые неприятные побочные эффекты.
Ваш класс несет ответственность (как минимум), чтобы создать экземпляр списка, чтобы убедиться, что он является выделенным списком и никогда не является нулевой ссылкой.
Публикация списка публичным геттером на самом деле напоминает его полную демонстрацию. Это минимальная инкапсуляция, которую вы должны делать, это фактически не инкапсуляция вообще.
Полная инкапсуляция выполняется только путем выставления элементов как IEnumerable
и предоставления операций добавления, удаления, подсчета и аналогичных операций в отдельных методах или свойствах. Чем больше вам нужно, тем больше становится сложнее. Это полезно, если вам действительно не нужно много основных операций извне и управлять как можно больше в классе.
Не так много инкапсуляции ... – CesarGon