19 / 19 / 2
Регистрация: 13.07.2012
Сообщений: 164
1

Рефакторинг участков кода с одинаковой сигнатурой, но разными именами объектов

13.02.2015, 13:50. Показов 728. Ответов 1
Метки нет (Все метки)

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

Сам код :
Java
1
2
3
4
5
6
7
8
9
fragment1.addLine(etName.getText().toString(), etCount.getText().toString());       //Добавляем строку в таблицц Белки
m.put(ATTRIBUTE_NAME_NAME, etName.getText().toString());        //Загружаем в HashMap имя
m.put(ATTRIBUTE_NAME_VALUE, etCount.getText().toString());      //Загружаем в HashMap количество
String id = String.valueOf(rand.nextInt(1000000000));      //Генерируем случайный id
m.put(ATTRIBUTE_NAME_ID, id);       //Загружаем в HashMap id
Toast.makeText(context, String.valueOf(id), Toast.LENGTH_LONG).show();
arrayProt.add(m);    //Добавление значения в массив текущих значений белков
tvProtSum.setText(calcSumElements("prot"));        //Пересчет столбца суммы белков и ккал
sql.writeToDB("PROT", etName.getText().toString(), etCount.getText().toString(), id);
Тот же самый код в другой формации:

Java
1
2
3
4
5
6
7
8
9
fragment2.addLine(etName.getText().toString(), etCount.getText().toString());       //Добавляем строку в таблицц Жиры
m.put(ATTRIBUTE_NAME_NAME, etName.getText().toString());        //Загружаем в HashMap имя
m.put(ATTRIBUTE_NAME_VALUE, etCount.getText().toString());      //Загружаем в HashMap количество
String id = String.valueOf(rand.nextInt(1000000000));      //Генерируем случайный id
m.put(ATTRIBUTE_NAME_ID, id);       //Загружаем в HashMap id
Toast.makeText(context, String.valueOf(id), Toast.LENGTH_LONG).show();
arrayFat.add(m);    //Добавление значения в массив текущих значений белков
tvFatSum.setText(calcSumElements("fat"));        //Пересчет столбца суммы жиров и ккал
sql.writeToDB("FAT", etName.getText().toString(), etCount.getText().toString(), id);
И так далее и тому подобное еще пять раз в разными именами.
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
13.02.2015, 13:50
Ответы с готовыми решениями:

Создание объектов с разными именами
Здравствуйте ребята. Помогите разобраться. При введении с клавиатуры цифры 1 создается новый...

в цикле создать несколько объектов с разными именами
Добрый день! Подскажите пожалуйста как в цикле создать несколько объектов с разными именами,...

Как прописать метод класса, чтобы он мог принимать разные делегаты с одинаковой сигнатурой?
Доброго времени суток! Есть класс Gradient у него есть метод GetDerivative1, хотелось бы чтобы...

Создание файлов с разными именами
как можно сделать на паскале, что бы программа создала один файл, потом второй и так ... и каждый...

1
Эксперт Java
4090 / 3824 / 745
Регистрация: 18.05.2010
Сообщений: 9,331
Записей в блоге: 11
13.02.2015, 14:18 2
Все что различается - выносите в параметры. Как-то так:
Java
1
2
3
4
5
6
7
8
9
10
11
public void doSomething(Fragment fragment, MyArray array, MyTv tvSum, String typeForCalc, String typeForDb) {
   fragment.addLine(etName.getText().toString(), etCount.getText().toString());       //Добавляем строку в таблицц Белки
   m.put(ATTRIBUTE_NAME_NAME, etName.getText().toString());        //Загружаем в HashMap имя
   m.put(ATTRIBUTE_NAME_VALUE, etCount.getText().toString());      //Загружаем в HashMap количество
   String id = String.valueOf(rand.nextInt(1000000000));      //Генерируем случайный id
   m.put(ATTRIBUTE_NAME_ID, id);       //Загружаем в HashMap id
   Toast.makeText(context, String.valueOf(id), Toast.LENGTH_LONG).show();
   array.add(m);    //Добавление значения в массив текущих значений белков
   tvSum.setText(calcSumElements(type));        //Пересчет столбца суммы белков и ккал
   sql.writeToDB(typeForDb, etName.getText().toString(), etCount.getText().toString(), id);
}
Java
1
doSomething(fragment1, "prot", "PROT", arrayProt, tvProtSum);
0
13.02.2015, 14:18
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
13.02.2015, 14:18
Помогаю со студенческими работами здесь

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

Копирование картинки с разными именами из списка
Здравствуйте, помогите пожалуйста написать батник: Нужно чтобы копировалась картинка с именами из...

Создание типизированного файла Pascal с разными именами
Как сделать что бы человек вводил название файла и создавался типизированный файл .tx с его...

Сохранение одного и того же файла с разными именами
у меня есть файл gth.jpg мне нужно подгружать список имен из 1.txt допустим там: колобок...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
2
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2023, CyberForum.ru