Исходный код
private function _mouseDown(e:MouseEvent):void 
{
	stage.addEventListener(MouseEvent.MOUSE_UP, _mouseUp);
	if (e.target is PCell) {
		//Клик по клетке, но возможно хотят подвигать поле :)
		_startDrag(e);
	}
	else {
		//Значит двигаем поле
		_startDrag(e);
	}
}Что так с этим кодом
В заголовке нет опечатки. Да, именно так: я считаю, что подобные конструкции с дублированием вполне обоснованны, и вот почему.
Прежде всего нужно смотреть на семантику кода: какого его предназначение, ради чего он здесь (см. FunctionLength).
Касательно кода примера, в первом случае выполняется обработка клика по одному элементу, в втором — по другому. Это два разных клика, у каждого своя логика обработки. Тот факт, что в данный момент времени реализация обработки оказалась одинаковой — простое совпадение. Элементы остались разными, у них разный собственный смысл и предназначение.
Поэтому у ветвления if (e.target is PCell) есть полное законное право остаться в обработчике.
А вот как именно оформлена обработка одного и другого условия — это отдельный разговор. Если бы у меня в обоих ветках был прописан полный код метода _startDrag — вот тогда да, это проблема. Тогда бы у меня было дублирование реализации со всеми вытекающими. Дублирование вызова метода — это не дублирование. Расслабься.
Теория
- Source Independency Principle
- ‘Input-Do-Output’ Pattern
- Don’t repeat realisation