Является ли неправильная практика добавлением логики в средство настройки свойств?

Я вскочил в проект, и я вижу, что другие разработчики добавляют много логики в сеттеры синтезированных свойств. Я понимаю, как это работает, но я думаю, что это затрудняет понимание потока программы; при чтении кода, когда я вижу self.something = whatever, я всегда проверяю, если something переопределяется.

Каково ваше мнение по этой теме? Считаете ли вы, что это признак плохой архитектуры или сложного решения?

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

Спасибо за любой ответ и учтите, что я говорю о цели C, если вы не видели тег (хотя это не должно быть проблемой, специфичной для языка, я думаю).

28 голосов | спросил phi 14 J000000Sunday13 2013, 01:43:35

3 ответа


42
  

Является ли неправильная практика добавлением логики в средство настройки свойств?

Нет

Были изобретены свойства, позволяющие разработчикам классов подключать логику к удобному интерфейсу доступа и назначения поля.

Сколько стоит? Это зависит от обязанностей класса. Вот некоторые вещи, которые разумно включить в средство настройки свойств:

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

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

ответил kevin cline 14 J000000Sunday13 2013, 02:38:56
15

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

ответил Rob van der Veer 14 J000000Sunday13 2013, 02:09:25
7

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

Я считаю, что имя метода должно объяснить, что делает этот метод, и весь метод. Кроме того, документация, связанная с этим методом, должна описывать ее более явным образом. В этом смысле имя метода в форме «set» + {существительное} не должно иметь никаких побочных эффектов, кроме установки значения переменной, и это должно быть единственным действием, связанным с ним. Проверка правильности аргумента является приемлемой, но должна быть описана в ее документации.

ответил DPM 14 J000000Sunday13 2013, 02:39:07

Похожие вопросы

Популярные теги

security × 330linux × 316macos × 2827 × 268performance × 244command-line × 241sql-server × 235joomla-3.x × 222java × 189c++ × 186windows × 180cisco × 168bash × 158c# × 142gmail × 139arduino-uno × 139javascript × 134ssh × 133seo × 132mysql × 132