Как стать автором
Обновить

Комментарии 5

Я вижу в статье про рефакторинг следующие вещи, которые вызывают некоторое непонимание:


1) Магические константы


result += (data.days - 2) * 1.5;

result = data.days * 3;

result = 1.5;

result += (data.days - 3) * 1.5;

2) Самопальный шаблонизатор c захардкоденными строками


function htmlStatement(customer, movies) {
  const data = createStatementData(customer, movies);
  let result = `<h1>Rental Record for <em>${data.name}</em></h1>\n`;
  result += "<table>\n";
  for (let r of data.rentals) {
    result += `  <tr><td>${r.title}</td><td>${r.amount}</td></tr>\n`;
  }
  result += "</table>\n";
  result += `<p>Amount owed is <em>${data.totalAmount}</em></p>\n`;
  result += `<p>You earned <em>${data.totalFrequentRenterPoints}</em> frequent renter points</p>\n`;
  return result;
}

3) switch-case с захардкоденными строками


switch (movie.code) {
    case "regular": /*...*/ break;
    case "new": /*...*/ break;
    case "childrens": /*...*/ break;
}

Можно было бы какое-нибудь подобие enum-а завести с этими значениями.

Рефакторинг невозможно закончить, его можно только остановить. Я думаю автор хотел показать рефакторинг про структуру кода, а не мелкие улучшения и сконцентрировался именно на этом, опустив все остальное.

Да, согласен.
Просто в статьи про рефакторинг часто тычат пальцем и говорят, что мол надо делать также. А в этом коде есть к чему придраться.

В любом коде есть, к чему придраться. Код вообще очень сильно зависит от обстоятельств. А обстоятельства в данном случае состоят в том, что Фаулер не любит, когда выступления, статьи и книги начинают с больших объемов теории, а не с примера. Поэтому сам он книгу именно с примера и начал, и задача оного примера — быть примитивным и продемонстрировать всего несколько приемов рефакторинга, дабы донести до читателя основную идею. Замена магических чисел на константы и прочие мелочи — все это потом присутствует в справочной части, но в первоначальном примере было бы неуместно. Точно так же и здесь Мартин сразу и честно говорит, что собирается показать всего лишь несколько конкретных видов рефакторинга, а не их все. Примитивный пример 18-летней давности вполне для этого подходит.
Magic numbers, бы убрать в const и шаблонизатор-функцию переделать на «шаблонные строки», если уж используются классы.
Зарегистрируйтесь на Хабре, чтобы оставить комментарий

Публикации