Как реализовать метод, который требует более 15 аргументов - PullRequest
0 голосов
/ 20 сентября 2019

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

Пример:

Mymethod (salutation, firstname, lastame,  address 1, address2, address3, address4, city, state, country, subject1, subject2, subject3)
{
//Implementation here
}

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

Есть ли другой лучший подход?Мое требование состоит в том, чтобы создать несколько записей о студентах всего за один звонок.

Ответы [ 3 ]

3 голосов
/ 20 сентября 2019

Вы можете обернуть все параметры в объекте.Допустим, ParamWrapper.Используя шаблон проектирования Builder ( здесь ), создайте его и перейдите к своему методу.Ваш код должен быть чище.

class ParamWrapper {
   String param1;
   String param2;
   String param3;
   String param4; 
}
//implement a ParamWrapperBuilder class
//.....

Ваш основной класс будет:

ParamWrapper param = ParamWrapperBuilder.param1("param1")
                                        .param2("param2")
                                        .param3("param3")
                                        .param4("param4").build();
//this is your method which has 15 arguments, now take only 1
doSomething(param);
0 голосов
/ 20 сентября 2019

Из моего опыта есть 2 варианта:

  1. Вы можете создать класс XXParam, который содержит все параметры в качестве свойств класса:
    class MethodParams {
        public int param1;
        public int param2;
    }
Вы можете использовать шаблон проектирования компоновщика для построения метода перед выполнением:
    int result = SomeExecutor.withParam1(param1)
        .withParam2(param2)
        .withParam3(param3).execute()

Для второго варианта вам нужно реализовать компоновщик для вашего метода и вызвать метод методом execute.

0 голосов
/ 20 сентября 2019

Нет, если ваш метод требует 15 аргументов, это означает, что ему нужно 15 единиц информации.

Но главное правило - вы, вероятно, сможете изменить свой метод.

Вы можете использовать шаблон проектирования агрегации.

Например:

class MyMethodParameter {
    String salutation, 
    String firstName, 
    ... 
}

Однако это всего лишь косметика.

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