Показать сообщение отдельно
Старый 21.03.2008, 15:28
Iv вне форума Посмотреть профиль Отправить личное сообщение для Iv Посетить домашнюю страницу Iv Найти все сообщения от Iv
  № 55  
Iv
 
Аватар для Iv

Регистрация: Apr 2001
Адрес: Moscow
Сообщений: 1,475
По умолчанию блок hasTransform

Блок кода if (hasTransform) аналогичными действиями превращается в метод:
Код AS3:
private function getRotation(node : XMLNode) : Number {
	// parse for rotation specification
	// hasRotate = getAttribute(node, "transform").indexOf("rotate");
	// if (hasRotate > -1) {
	var hasRotate:Boolean = getAttribute(node, "transform").indexOf("rotate") > -1;
	if (hasRotate) {
		var startRotate:Number = getAttribute(node, "transform").indexOf("(");
		var endRotate:Number = getAttribute(node, "transform").indexOf(")");
		return parseInt(getAttribute(node, "transform").substr(startRotate + 1, endRotate - startRotate));
	} 
	return 0;
}
А вызов становится таким:
Код AS3:
if (hasTransform) {
	rotation = getRotation(node);
} else {
	rotation = 0;
}
В этом месте я отметил для себя странность: переменная rotation локальна, мы ее присваиваем, но нигде не используем. Перенесем ее объявление ближе к присвоению и всё вместе закомментируем:
Код AS3:
//	var rotation:Number;
//	if (hasTransform) {
//		rotation = getRotation(node);
//	} else {
//		rotation = 0;
//	}
Мы нашли странный участок кода и закомментировали его, тем самым убрав неиспользуемую логику из приложения. Этот участок кода мы обнаружили в процессе рефакторинга. Заметьте, что в логику метода мы не вдавались, мы лишь вынесли разные логические блоки в отдельные методы.
Рефакторинг в этом смысле очень похож на ситуацию, когда мы берем груду запчастей и начинаем их все раскладывать по полочкам, иногда вытирая пыль. В этом процессе нам достаточно в общем виде представлять зачем запчасть нужна, при этом нас совершенно не заботит как именно она делает свое дело.
Процесс рефакторинга не изменяет логику приложения, но, в итоге, дает нам возможность впоследствии сделать это точечно, сосредоточившись на изменении логики небольших методов.
Просто сравните каким был метод extractCommands и каким он стал сейчас. В данный момент его логика прозрачна и понятна. Логика каждого из вынесенных методов не требует семи пядей во лбу и может быть легко изменена или оптимизирована, если такая потребность возникнет.
__________________
http://realaxy.com


Последний раз редактировалось iNils; 20.12.2010 в 13:35.