В моем понимании защищать поля и свойства нужно, если они не должны использоваться за пределами класса, тогда private, исли должны то public, protected не приходилось еще применять
Почему? Если не надо чтобы это свойство можно было менять извне, протект и методы и конструкторы для его установки, соблюдается принцип построения api класса