Работа с несколькими входными параметрами с использованием класса-оболочки - PullRequest
0 голосов
/ 12 июля 2009

Как своего рода продолжение этого , у меня есть следующий вопрос новичка:

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

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

Подводя итог, я не думаю, что это:

MyClass::MyClass(int param1, int param2, int param3... int paramN)
{
    this->param1 = param1;
    this->param2 = param2;
    this->param3 = param3;
    ...
    this->paramN = paramN;
}

... сильно отличается от этого:

Result MyClass::myInterface(MyInputClass input)
{
    //perform calculations
}

MyInputClass::MyInputClass(int param1, int param2, int param3... int paramN)
{
    this->param1 = param1;
    this->param2 = param2;
    this->param3 = param3;
    ...
    this->paramN = paramN;
}

И, конечно, я стараюсь как можно больше избегать сеттеров.

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

Ответы [ 3 ]

3 голосов
/ 12 июля 2009

Вот несколько причин, по которым можно использовать класс параметров:

  • Повторное использование: Вы можете сохранить параметры в переменной и использовать их, возможно, другим способом.
  • Разделение задач: обработка параметров, скажем, проверка того, какие параметры активны, какие находятся в их правильных диапазонах и т. Д., Выполняется в классе параметров; ваш метод расчета знает только, как рассчитать, поэтому в будущем вы будете знать, где находится каждый, и никакая логика не будет смешанной.
  • Вы можете добавить новое значение и минимально повлиять на ваш метод калькулятора.
  • Возможно, ваш метод калькулятора может быть применен к двум различным наборам параметров, скажем, к целому числу и к двойному. Более удобочитаемо / доступно / быстрее написать логику вычисления только один раз и изменить объект параметра.

Некоторым классам не нужно инициализировать каждое поле в конструкторе. Иногда сеттеры - путь.

3 голосов
/ 12 июля 2009

Самые большие преимущества:

  • Изоляция от изменений. Можете добавить новые свойства в классе параметров и не нужно менять класс, который использует его или любого из его абонентов.

  • Сокращение кода при цепочке методы. Если MyClass нужно пройти его параметры около MyInputClass удаляет кучу кода.

0 голосов
/ 03 октября 2009

Все остальные пункты полностью действительны и здоровы. Вот небольшое подкрепление из какого-то авторитетного текста:

Code Complete предполагает, что вы ограничиваете количество параметров любой процедуры до семи , так как «семь - магическое число для понимания людьми». Далее предлагается, что передача более семи параметров увеличивает связь с областью вызова и что вместо этого следует использовать структурированную переменную (ala MyInputClass).

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