[Technical Issue] OOP - Капсулация на полета от обекти
Здравейте,
Тепърва започва отборната работа по ООП и следователно, започнах по-сериозно да се замислят за всякакви детайли свързани с това. В тази връзка, едно нещо във връзка с споменатия проблем не ми е ясно:
Когато се капсулират обекти, трябва ли да не се позволява публичното им get-ване?
Като пример, ако имаме поле от тип List, и в съответното му property оставим публичен getter, той ще може да бъде манипулиран от външни класове по всякакъв начин, като могат да се махат елементите му, да се добавят нови и т.н. Единственото ограничение е че това поле не може да бъде сменено с нов обект от тип List.
Това счита ли се за лоша капсулация или е допустимо?
В противен случай, би трябвало да се правят методи във съответния клас тип AddObject, RemoveObject и т.н. Това не се отнася само за List, а и за всякакви обекти, защото през getter-а могат всячески да бъдат access-вани property-тата им.
Resharper-a подсказва за автоматични пропъртита тогава, когато в set-ъра имаме само присвояване на стойност, т.е. излишно е да се пише поле и пропърти, след като може да се използва автоматично пропърти.
Примерно за енумерациите е напълно достатъчно да има автоматично пропърти, защото на конструктора се подава променлива от типа на енумератора, така че няма нужда от никакви валидации. В моите домашни често имам хем автоматични, хем такива с валидация. Всичко зависи от конкретната задача.
От гледна точка на консистентност е добре да се прави по един начин - като решиш да пишеш автоматични, пишеш само автоматични, и обратно. Като цяло няма смисъл да пишеш пропъртита по дългия начин, ако няма валидация и просто вършат работата на автоматичните. Важното е да няма публични полета.