У меня есть относительно большой унаследованный метод, который я хотел бы реорганизовать. Он подходит для типа «Bulleted method», как указано в «Майклах Персе» «Эффективно работает с устаревшим кодом», и поэтому его можно разделить несколькими последовательными способами довольно прямолинейно. Но каждый из его последовательных шагов выводит какое-то сообщение в журнале, и для формирования этого сообщения требуется гораздо больше данных, чем для самого шага. Поэтому, когда я пытаюсь извлечь метод, я получаю метод, имеющий, скажем, 6 параметров. Если бы я удалил эти операторы журнала, у меня был бы метод только с одним параметром. Поэтому я фактически не могу реорганизовать что-либо. И мне не разрешено просто записывать записи журнала.Заявления журнала запрещают рефакторинг: как это сделать?
Часть метода выглядит следующим образом:
// much of code before
Device device = getDevice(deviceID);
boolean isFirstRegistration = false;
if (device == null) {
/*logger.trace(
"DeviceId", deviceID,
"ADM", adminCode,
"Phone", clientData.getPhone()
);
logger.info("First registration of the device. Device ID - " + deviceID);*/
isFirstRegistration = true;
} else {
/*logger.trace(
"DeviceId", deviceID,
"ADM", adminCode,
"Phone", clientData.getPhone()
);
logger.info("Device ID - " + deviceID
+ " has been previously registered by adminCode: "
+ device.getAdminCode());*/
}
// much of code after
Как вы видите, закомментирована заявления протоколирования. В этом случае я могу извлечь метод boolean isFirstRegistration(String deviceId)
. Но когда они раскоментированы, подпись раздувается до boolean isFirstRegistration(String deviceId, String adminCode, ClientData clientData)
. И это не самый экстремальный случай, только один из первого взгляда. У вас есть идеи, как мне реорганизовать такой метод?
Можем ли мы это увидеть? Вы могли бы использовать метод вспомогательного журнала, чтобы получить дополнительные данные, и вернуть одну строку/объект, который затем передается вашему методу ведения журнала. Или поставьте все элементы, необходимые для входа в один массив или хеш, и передайте их. – CaffGeek
Что вы пытаетесь выполнить через рефакторинг? –
Я попытаюсь написать фрагмент, похожий на часть этого метода. – Rorick