Цитата (sergeiss @ 25.10.2015 - 12:32) |
Короче говоря, надо говорить не про "ООП в кубическом вакууме", а о конкретных ситуациях: вот тут они нужные, а там - не нужны.
|
Я этого и хочу! Если будут куски кода из реальных проектов, так вообще замечательно.
Цитата (sergeiss @ 25.10.2015 - 12:32) |
По моему мнению, геттеры-сеттеры полезны в тех случаях, когда одновременно с изменением свойства надо выполнить действие. Допустим, выставили свойство, после изменения которого надо сделать повторный коннект (к БД, к порту...). Без сеттера нужно будет помнить, что сначала выставляешь свойство, затем вызываешь функцию. А с сеттером это не нужно, т.к. ты заложишь это внутри сеттера. Что касается геттера. Допустим, получаемая величина зависит от кучи других и может часто меняться. Тогда ты должен или при изменении тех других параметров менять этот параметр (наверняка где-то забудешь это сделать), или просто в геттере вычислить, что происходит в данный момент. |
Я согласен о том что сеттеры позволяют инкапсулировать сложность, но проблема в том, что при работе с атрибутами сущностей нет этой сложности, обычно имеется готовый объект уже настроеный в который надо пихать значение от различных слоев приложения.
_____________
Люди, имеющие низкий уровень квалификации, делают ошибочные выводы, принимают неудачные решения и при этом неспособны осознавать свои ошибки в силу низкого уровня своей квалификации
sergeiss
25.10.2015 - 12:55
Цитата (chee @ 25.10.2015 - 12:49) |
Если будут куски кода из реальных проектов, так вообще замечательно. |
Кусков кода у меня нет. Я тебе просто на словах объясню.
Моё знакомство с ООП началось давно, с С++ в реализации от Borland. Там достаточно активно используются геттеры-сеттеры, при написании компонент. Но только там, где они реально нужны! Если же нужно просто выставить свойство, не делая при этом никаких действий, то никаких лишних телодвижений не делается.
И я так думаю, что там далеко не дураки работают. Для меня это весьма весомый аргумент.
_____________
*
Хэлп по PHP*
Описалово по JavaScript *
Хэлп и СУБД для PostgreSQL*
Обучаю PHP, JS, вёрстке. Интерактивно и качественно. За разумные деньги. *
"накапливаю умение телепатии" (С) и "гуглю за ваш счет" (С)
Цитата (sergeiss @ 25.10.2015 - 12:55) |
И я так думаю, что там далеко не дураки работают. Для меня это весьма весомый аргумент. |
Проблема в том что для меня это не аргумент
Вероятно что не дураки, но возможно тоже также смотрят на кого-то и повторяют, и говорят тоже самое
_____________
Люди, имеющие низкий уровень квалификации, делают ошибочные выводы, принимают неудачные решения и при этом неспособны осознавать свои ошибки в силу низкого уровня своей квалификации
AllesKlar
25.10.2015 - 22:39
Вот он НЕ единственный и правильный, но достаточный аргумент, чтобы использовать гетеры и сеттеры.
Цитата (sergeiss @ 25.10.2015 - 10:32) |
По моему мнению, геттеры-сеттеры полезны в тех случаях, когда одновременно с изменением свойства надо выполнить действие. |
Если изменение одного свойства должно вести к изменению другого либо спровоцировать некий экшен, то что может быть проще?
_____________
[продано копирайтерам]
sergeiss
25.10.2015 - 22:46
AllesKlar, давая этот ответ, я подразумевал, что геттеры-сеттеры хороши для некоторых случаев
То есть, для некоторых свойств их можно/нужно использовать, а для других не обязательно. Подчеркну, что в одном и том же объекте.
Я так понял начальный вопрос, что ТС сомневается в необходимости бездумного использования геттеров-сеттеров для всего подряд.
_____________
*
Хэлп по PHP*
Описалово по JavaScript *
Хэлп и СУБД для PostgreSQL*
Обучаю PHP, JS, вёрстке. Интерактивно и качественно. За разумные деньги. *
"накапливаю умение телепатии" (С) и "гуглю за ваш счет" (С)
Цитата (sergeiss @ 25.10.2015 - 18:46) |
То есть, для некоторых свойств их можно/нужно использовать, а для других не обязательно. Подчеркну, что в одном и том же объекте. |
Вот потому их и юзают
всегда. Для однообразия интерфейсов. Чтобы всё было однотипно. Но это тараканы.
_____________
Если вам недостаточно собственных заблуждений, можно расширить их мнениями экспертов.Нужно уважать мнение оппонета. Ведь заблуждаться - его святое право.Настаивал, настаиваю и буду настаивать на своем. На кедровых орешках.
AllesKlar
25.10.2015 - 22:50
sergeissЕсли проект небольшой, то да, можно поубирать.
А если там пара сотен файлов, в котором обращение к свойству объекта?
А потом бац... а давайте, если пол меняется на Женский, то обращение будет автоматически в объекте меняться с Господин на Госпожу...
И поехали по всему проекту if... else... шмалять
_____________
[продано копирайтерам]
Цитата (AllesKlar @ 25.10.2015 - 18:50) |
Если проект небольшой, то да, можно поубирать. А если там пара сотен файлов, в котором обращение к свойству объекта? А потом бац... а давайте, если пол меняется на Женский, то обращение будет автоматически в объекте меняться с Господин на Госпожу... И поехали по всему проекту if... else... шмалять |
Как же вам, ООПэшникам, вбили в голову на генетическом уровне страх перед будущим. Когда от этого рождаются идеи плана инверсии зависимостей, это хорошо. А когда вот так бездумно, из-за животного страха, все через геттеры/сеттеры... А кто-нибудь проводил бенчи? Или да, о чем я. Tru ООПэшнику на ресурсы плевать.
Так вот сеттеры работают в 10 (на порядок!) раз медленнее прямого обращения к свойствам. А в большинстве случаев, если соблюдать ваши же каноны, такой ситуации со сменой пола произойти не может в принципе. Ибо абстракции не должны зависеть от деталей.
_____________
Если вам недостаточно собственных заблуждений, можно расширить их мнениями экспертов.Нужно уважать мнение оппонета. Ведь заблуждаться - его святое право.Настаивал, настаиваю и буду настаивать на своем. На кедровых орешках.
Valick
26.10.2015 - 07:43
Цитата (AllesKlar @ 25.10.2015 - 21:50) |
Если проект небольшой, то да, можно поубирать. |
то можно и попроцедурить блокнот не переломится
Цитата (twin @ 26.10.2015 - 05:42) |
такой ситуации со сменой пола произойти не может в принципе |
ну как не может, вот поехал в Тайланд мужиком, нажрался, упал, уснул, просыпаешься, смотришь в зеркало, херак, а ты баба... между ног ничего нет, а в голове сплошные if... else...
_____________
Стимулятор ~yoomoney - 41001303250491
Michael
26.10.2015 - 07:59
Цитата (chee @ 25.10.2015 - 10:26) |
Ну смотри у нас на работе в системе AR используется, геттеры и сеттеры там не используются как и магические методы __get или __set, то есть атрибуты сущностей как и всякого рода зависимости установлены в публичные свойства без сеттеров, и в принципе за 3 года работы, у меня не было претензий по поводу этой схемы. |
Вы для каждого столбца объявляете public св-во?
А как то следите например что не было изменений чтобы при save() не делать update?
_____________
There never was a struggle in the soul of a good man that was not hard
Michael, Вот, кстати, тоже интересно как chee отслеживает измененные св-ва в AR.
Цитата (twin @ 26.10.2015 - 02:42) |
Так вот сеттеры работают в 10 (на порядок!) раз медленнее прямого обращения к свойствам. |
Ну не в 10 а только в 2 (что тоже не очень круто, но как же иначе ;) ). А вот с магией где-то в 10 раз медленнее:
class TProp {
public $foo = 'Foo';
}
$t = new TProp();
$start = microtime(true);
for($i=0;$i<10000;++$i) {
$t->foo;
}
echo microtime(true) - $start, PHP_EOL;
class TMethod {
private $_foo = 'Foo';
public function getFoo() {
return $this->_foo;
}
}
$t = new TMethod();
$start = microtime(true);
for($i=0;$i<10000;++$i) {
$t->getFoo();
}
echo microtime(true) - $start, PHP_EOL;
class TMagic {
private $_foo = 'Foo';
public function getFoo() {
return $this->_foo;
}
public function __get($key) {
return $this->{'_' . $key};
}
}
$t = new TMagic();
$start = microtime(true);
for($i=0;$i<10000;++$i) {
$t->foo;
}
echo microtime(true) - $start, PHP_EOL;
Цитата |
Property: 0.00032496452331543 Method: 0.00066113471984863 Magic: 0.0035021305084229 |
Быстрый ответ:
Powered by dgreen
Здесь расположена полная версия этой страницы.