Вот оптимизированная версия кода jQuery, предоставленного Ричардом Дж.П. Ле Гуэном:
$(document).ready(function() {
$('a').each(function() {
var clicked = false;
$(this).bind('click', function() {
if(!clicked) return !(clicked = true);
});
});
});
Я бы сказал, что ваш рефакторинг очень хорош, если ваша новая единственная строка кода заменяет несколько строк кода во многих местах вашей программы. Тем более, что во всех этих местах функциональность будет одинаковой.
Программист, придя за вами и просмотрев ваш код, просто посмотрит на определение метода расширения, чтобы узнать, что он делает, и теперь он знает что этот код определен в одном месте, поэтому он не может отличаться от места к месту.
Попробуйте, если нужно, но я считаю, что дело не в краткости, а в том, хотите ли вы принудительно применять поведение каждый раз или большую часть времени. И, в более широком смысле, если условие проверки изменится, оно, вероятно, изменится повсеместно.
По сути, сокращение небольшого фрагмента стандартного кода не обязательно делает вещи более лаконичными; это всего лишь еще один кусочек абстрактности, который разработчик должен преодолеть и понять.
Как разработчик, я понятия не имею, что означает «ExecuteWithVerify». Что именно мы проверяем? Придется поискать и запомнить. Но с помощью стандартного кода я могу посмотреть на код и точно понять, что происходит.
Это не сокрытие информации при извлечении или рефакторинге кода. Это скрывает только информацию, когда вы начинаете ограничивать доступ к определению расширения после рефакторинга.
Оператор «новый» внутри класса (кроме конструктора) следует избегать любой ценой. Это то, что вам нужно здесь для рефакторинга.