Дизайн класса: передача значений через свойство (Set var) vs функция vs аргумент конструктора - PullRequest
2 голосов
/ 08 июля 2010

Это своего рода открытый вопрос. Я всегда продолжаю чесать голову при выборе между ними. Я могу передать значения в класс по:

Передача аргумента функции класса:

MyClass m = new MyClass();
m.DoSomething(arg);

Передача аргумента при создании объекта:

MyClass m = new MyClass(arg);
m.DoSomething();

Установка значения с помощью другой функции / Свойство

MyClass m = new MyClass();
m.SetArg(arg);
m.DoSomething();

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

Ответы [ 2 ]

8 голосов
/ 08 июля 2010

Я использую некоторое правило:

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

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

Если это просто данные класса, используйте setters / properties для его заполнения.

Если таких аргументов много, рефакторируйте аргументы в классе контейнераих собственные (MyClassSettings, например).

0 голосов
/ 16 июля 2010

Используйте параметры конструктора для предоставления зависимостей, используемых классом.

Использовать параметры метода при передаче сообщений между объектами.

Избегайте методов получения и установки, когда это возможно (см. Почему методы получения и установки являются злыми для полного обсуждения этой темы).

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