Вот несколько небольших кусочков логики, которые для меня приводят к неприязнению свойств в языке:
Некоторые структуры программирования используются, потому что они есть, даже если они поддерживают плохие методы программирования.
Сеттеры подразумевают изменяемые объекты. Что-то, что можно использовать редко.
Хороший ОО дизайн, вы просите объект выполнить некоторую бизнес-логику. Свойства подразумевают, что вы запрашиваете данные и сами манипулируете данными.
Хотя вы МОЖЕТЕ переопределить методы в методах установки и получения, немногие когда-либо делают; также последняя общедоступная переменная точно такая же, как получатель. Так что, если у вас нет изменяемых объектов, это спорный вопрос.
Если ваша переменная имеет бизнес-логику, связанную с ней, логика должна ОБЯЗАТЕЛЬНО находиться в классе с переменной. Если это не так, почему в мире это переменная ??? оно должно быть «Данные» и находиться в структуре данных, чтобы им можно было управлять с помощью общего кода.
Я полагаю, что Джон Скит указал, что в C # есть новый метод для обработки таких данных: данные, которые должны быть типизированы во время компиляции, но не должны быть переменными, но мой мир очень мало взаимодействует с миром C # Я просто поверю ему на слово, что это круто.
Кроме того, я полностью согласен с тем, что в зависимости от вашего стиля и кода, с которым вы взаимодействуете, вы просто ДОЛЖНЫ время от времени иметь ситуацию установки / получения. Я по-прежнему усредняю по одному сеттеру / геттеру каждый класс или два, но этого недостаточно, чтобы заставить меня почувствовать, что новая структура программирования оправдана.
И обратите внимание, что у меня очень разные требования к работе и домашнему программированию. Для работы, где мой код должен взаимодействовать с кодом 20 других людей, я считаю, что чем более структурирован и явен, тем лучше. В доме Groovy / Ruby это хорошо, и свойства были бы хорошими, и т. Д.