Прочтите внимательно эту статью. Голуб утверждает, что геттеры и сеттеры являются злым «антипаттерном по умолчанию», дурной привычкой, которой мы скатываемся при проектировании системы; потому что мы можем.
Мыслительный процесс должен быть последовательным; Что этот объект делает? Каковы его обязанности? Каково его поведение? Что он знает? Долгое и упорное размышление над этими вопросами естественным образом приводит вас к разработке классов, которые предоставляют максимально возможный интерфейс самого высокого уровня.
Автомобиль - хороший тому пример. Он предоставляет четко определенный стандартизированный высокоуровневый интерфейс. Я не забочусь о _1 _... это миль / ч или км / ч? Я просто ускоряюсь, круизу, замедляю. Мне не нужно думать о деталях в setSteeringWheelAngle(getSteeringWheelAngle()+Math.rad(-1.5))
, я просто turn(-1.5)
, а детали заботятся под капотом.
Он сводится к следующему: «Вы можете и должны выяснить, для чего будет использоваться каждый класс, для чего он нужен, что он представляет, а также предоставить интерфейс самого высокого уровня, который соответствует этим требованиям. Геттеры и сеттеры обычно являются отговоркой, когда программисту просто лень проводить анализ, необходимый для того, чтобы точно определить, чем является каждый класс, а чем он не является, и поэтому мы идем по пути «он может делать все». Геттеры и сеттеры - зло!
Иногда фактические требования к классу неизвестны заранее. Это круто, просто откажитесь и используйте антипаттерн геттера / сеттера на данный момент, но когда вы действительно узнаете по опыту, для чего используется класс, вы, вероятно, захотите вернуться и очистить грязный низкоуровневый интерфейс. Рефакторинг, основанный на «вещах, которые вы хотели бы знать, когда писали отстой», является нормой для этого курса. Вам не обязательно знать все, чтобы начать, просто чем больше вы знаете, тем меньше переделок, вероятно, потребуется в пути.
Это тот менталитет, который он продвигает. Геттеры и сеттеры - это ловушка, в которую легко попасть.
Да, для bean-компонентов в основном требуются геттеры и сеттеры, но для меня bean-компонент - это особый случай. Бобы представляют собой существительные, вещи, материальные идентифицируемые (если не физические) объекты. На самом деле не многие объекты обладают автоматическим поведением; в большинстве случаев вещами манипулируют внешние силы, в том числе люди, чтобы сделать их продуктивными.
daisy.setColor(Color.PINK)
имеет смысл. Что еще можно сделать? Может быть, вулканское слияние разумов заставило цветок захотеть стать розовым? Хм?
У геттеров и сеттеров есть свое «зло». место. Просто, как и все действительно хорошие OO-вещи, мы склонны злоупотреблять ими, потому что они безопасны и знакомы, не говоря уже о простых, и поэтому было бы лучше, если бы новички не видели и не слышали о них, по крайней мере, до тех пор, пока они '' Я освоил идею слияния разума.
person
corlettk
schedule
15.06.2009