Должен ли объект когда-либо иметь свойство, результат которого основан на бизнес-логике? - PullRequest
2 голосов
/ 10 ноября 2008

Или они всегда должны быть функцией, когда задействована бизнес-логика?

Пример: Order.RequiresPayment

свойство или функция? Есть бизнес-правила относительно того, когда это правда или нет

Есть шаблон, который может определить это?

Ответы [ 6 ]

4 голосов
/ 10 ноября 2008

Если вы сомневаетесь, рассмотрите поддержку вашего кода в качестве руководства.

Если OrderRequiresPayment определяется очень просто (например, установить true при создании заказа, false при получении платежа), свойство подходит.

Если это определяется формулой или обновляется во многих местах, вероятно, лучше всего инкапсулировать ее в функцию.

1 голос
/ 10 ноября 2008

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

Причинение изменения состояния объекта при доступе к свойствам делает отладку очень трудной - разработчик обычно ожидает, что функция вызовет что-то, и при использовании отладчика функция не запускается, если они не готовы к результатам. С другой стороны, большинство отладчиков будут автоматически получать доступ к общим свойствам объекта, не ожидая, что состояние объекта изменится просто при доступе к свойствам.

1 голос
/ 10 ноября 2008

Как правило, свойство не должно требовать сложных расчетов.

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

1 голос
/ 10 ноября 2008

Это вопрос конкретного языка.

Например, в Python бизнес-правила могут (и часто являются) обоими.

В принципе, это функции методов.

Тем не менее, Python позволяет им отображаться как свойства, если это легче для глаз при чтении кода.

Обратите внимание, что

  1. Бизнес-правила - это, как правило, функции метода. Иногда это отношения между объектами. Функции метода легко расширяются и модифицируются. Запуск со свойством является ошибкой, когда вам нужно добавить объекты и изменить свойство для функции метода.

  2. Свойства лучше всего использовать как синтаксический сахар, чтобы функция метода выглядела как свойство, потому что она делает код проще или легче для чтения.

0 голосов
/ 10 ноября 2008

Я согласен с Адамом. Обычно свойство будет содержать такие значения, как Count, Length и т. Д.

0 голосов
/ 10 ноября 2008

Как правило, вы можете решить, имеет ли смысл думать о нем как о коммерческой собственности или бизнес-функции. Уровень абстракции не меняет того, как вы думаете о вещах.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...