[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Геттеры и сеттеры
Страницы: 1, 2, 3, 4, 5
chee
Цитата (sergeiss @ 25.10.2015 - 12:32)
Короче говоря, надо говорить не про "ООП в кубическом вакууме", а о конкретных ситуациях: вот тут они нужные, а там - не нужны.

Я этого и хочу! Если будут куски кода из реальных проектов, так вообще замечательно.
Цитата (sergeiss @ 25.10.2015 - 12:32)
По моему мнению, геттеры-сеттеры полезны в тех случаях, когда одновременно с изменением свойства надо выполнить действие.
Допустим, выставили свойство, после изменения которого надо сделать повторный коннект (к БД, к порту...). Без сеттера нужно будет помнить, что сначала выставляешь свойство, затем вызываешь функцию. А с сеттером это не нужно, т.к. ты заложишь это внутри сеттера.
Что касается геттера. Допустим, получаемая величина зависит от кучи других и может часто меняться. Тогда ты должен или при изменении тех других параметров менять этот параметр (наверняка где-то забудешь это сделать), или просто в геттере вычислить, что происходит в данный момент.

Я согласен о том что сеттеры позволяют инкапсулировать сложность, но проблема в том, что при работе с атрибутами сущностей нет этой сложности, обычно имеется готовый объект уже настроеный в который надо пихать значение от различных слоев приложения.

_____________
Люди, имеющие низкий уровень квалификации, делают ошибочные выводы, принимают неудачные решения и при этом неспособны осознавать свои ошибки в силу низкого уровня своей квалификации
sergeiss
Цитата (chee @ 25.10.2015 - 12:49)
Если будут куски кода из реальных проектов, так вообще замечательно.

Кусков кода у меня нет. Я тебе просто на словах объясню.

Моё знакомство с ООП началось давно, с С++ в реализации от Borland. Там достаточно активно используются геттеры-сеттеры, при написании компонент. Но только там, где они реально нужны! Если же нужно просто выставить свойство, не делая при этом никаких действий, то никаких лишних телодвижений не делается.
И я так думаю, что там далеко не дураки работают. Для меня это весьма весомый аргумент.

_____________
* Хэлп по PHP
* Описалово по JavaScript
* Хэлп и СУБД для PostgreSQL

* Обучаю PHP, JS, вёрстке. Интерактивно и качественно. За разумные деньги.

* "накапливаю умение телепатии" (С) и "гуглю за ваш счет" (С)

user posted image
chee
Цитата (sergeiss @ 25.10.2015 - 12:55)
И я так думаю, что там далеко не дураки работают. Для меня это весьма весомый аргумент.

Проблема в том что для меня это не аргумент smile.gif Вероятно что не дураки, но возможно тоже также смотрят на кого-то и повторяют, и говорят тоже самое smile.gif

_____________
Люди, имеющие низкий уровень квалификации, делают ошибочные выводы, принимают неудачные решения и при этом неспособны осознавать свои ошибки в силу низкого уровня своей квалификации
AllesKlar
Вот он НЕ единственный и правильный, но достаточный аргумент, чтобы использовать гетеры и сеттеры.
Цитата (sergeiss @ 25.10.2015 - 10:32)
По моему мнению, геттеры-сеттеры полезны в тех случаях, когда одновременно с изменением свойства надо выполнить действие.


Если изменение одного свойства должно вести к изменению другого либо спровоцировать некий экшен, то что может быть проще?

_____________
[продано копирайтерам]
sergeiss
AllesKlar, давая этот ответ, я подразумевал, что геттеры-сеттеры хороши для некоторых случаев smile.gif То есть, для некоторых свойств их можно/нужно использовать, а для других не обязательно. Подчеркну, что в одном и том же объекте.
Я так понял начальный вопрос, что ТС сомневается в необходимости бездумного использования геттеров-сеттеров для всего подряд.

_____________
* Хэлп по PHP
* Описалово по JavaScript
* Хэлп и СУБД для PostgreSQL

* Обучаю PHP, JS, вёрстке. Интерактивно и качественно. За разумные деньги.

* "накапливаю умение телепатии" (С) и "гуглю за ваш счет" (С)

user posted image
twin
Цитата (sergeiss @ 25.10.2015 - 18:46)
То есть, для некоторых свойств их можно/нужно использовать, а для других не обязательно. Подчеркну, что в одном и том же объекте.
Вот потому их и юзают всегда. Для однообразия интерфейсов. Чтобы всё было однотипно. Но это тараканы.


_____________
Если вам недостаточно собственных заблуждений, можно расширить их мнениями экспертов.

Нужно уважать мнение оппонета. Ведь заблуждаться - его святое право.

Настаивал, настаиваю и буду настаивать на своем. На кедровых орешках.

user posted image
AllesKlar
sergeiss
Если проект небольшой, то да, можно поубирать.
А если там пара сотен файлов, в котором обращение к свойству объекта?
А потом бац... а давайте, если пол меняется на Женский, то обращение будет автоматически в объекте меняться с Господин на Госпожу...
И поехали по всему проекту if... else... шмалять smile.gif

_____________
[продано копирайтерам]
twin
Цитата (AllesKlar @ 25.10.2015 - 18:50)
Если проект небольшой, то да, можно поубирать.
А если там пара сотен файлов, в котором обращение к свойству объекта?
А потом бац... а давайте, если пол меняется на Женский, то обращение будет автоматически в объекте меняться с Господин на Госпожу...
И поехали по всему проекту if... else... шмалять

Как же вам, ООПэшникам, вбили в голову на генетическом уровне страх перед будущим. Когда от этого рождаются идеи плана инверсии зависимостей, это хорошо. А когда вот так бездумно, из-за животного страха, все через геттеры/сеттеры... А кто-нибудь проводил бенчи? Или да, о чем я. Tru ООПэшнику на ресурсы плевать. smile.gif

Так вот сеттеры работают в 10 (на порядок!) раз медленнее прямого обращения к свойствам. А в большинстве случаев, если соблюдать ваши же каноны, такой ситуации со сменой пола произойти не может в принципе. Ибо абстракции не должны зависеть от деталей.

_____________
Если вам недостаточно собственных заблуждений, можно расширить их мнениями экспертов.

Нужно уважать мнение оппонета. Ведь заблуждаться - его святое право.

Настаивал, настаиваю и буду настаивать на своем. На кедровых орешках.

user posted image
Valick
Цитата (AllesKlar @ 25.10.2015 - 21:50)
Если проект небольшой, то да, можно поубирать.

то можно и попроцедурить блокнот не переломится
Цитата (twin @ 26.10.2015 - 05:42)
такой ситуации со сменой пола произойти не может в принципе

ну как не может, вот поехал в Тайланд мужиком, нажрался, упал, уснул, просыпаешься, смотришь в зеркало, херак, а ты баба... между ног ничего нет, а в голове сплошные if... else...

_____________
Стимулятор ~yoomoney - 41001303250491
Michael
Цитата (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
kaww
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
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.