Skip to main content

Рефакторинг для реализации шаблона конструктора

Copilot Chat может предложить шаблоны проектирования, которые можно использовать для улучшения кода.

Код, который не соответствует установленным шаблонам проектирования (например, Singleton, Factory или Observer), может привести к таким проблемам, как жесткое связывание, отсутствие гибкости или дублированный код.

Copilot Chat помогает использовать соответствующие шаблоны проектирования, чтобы сделать код более гибким и поддерживаемым. Например, рекомендуется преобразовать повторяющиеся экземпляры в шаблон фабрики или использовать шаблон наблюдателя для тесного соединения классов.

Note

Ответы, описанные в этой статье, являются примерами. Ответы Copilot Chat являются недетерминированными, поэтому вы можете получить различные ответы, показанные здесь.

Пример сценария

Этот код JavaScript создает три Person объекта, каждый из которых содержит name и age свойства. Затем он использует имя человека для получения и печати своего возраста.

class Person {
  constructor(name, age) {
    this.name = name;
    this.age = age;
  }
}

var people = {};

function addPerson(name, age) {
  people[name] = new Person(name, age);
}

function getAge(name) {
  if (people[name]) {
    console.log(name + " is " + people[name].age + " years old.");
  } else {
    console.log("Person not found.");
  }
}

addPerson("Ana", 30);
addPerson("Mario", 25);
addPerson("Louise", 40);

getAge("Mario");

Пример запроса 1

What design patterns could improve this code? Don't show me code examples.

Пример ответа 1

Copilot предлагает следующие шаблоны:

  • Шаблон singleton: чтобы обеспечить наличие только одного экземпляра people объекта.
  • Шаблон фабрики: создание фабрики для создания Person объектов.
  • Шаблон модуля: чтобы инкапсулировать people объект и связанные функции в модуле, чтобы избежать загрязнения глобального пространства имен.

Пример запроса 2

Теперь можно попросить Copilot реализовать шаблон, который вы считаете наиболее подходящим.

Refactor this code using the module pattern

Пример ответа 2

const PersonModule = (function() {
  class Person {
    constructor(name, age) {
      this.name = name;
      this.age = age;
    }
  }

  const people = {};

  function addPerson(name, age) {
    people[name] = new Person(name, age);
  }

  function getAge(name) {
    if (people[name]) {
      console.log(name + " is " + people[name].age + " years old.");
    } else {
      console.log("Person not found.");
    }
  }

  return {
    addPerson,
    getAge
  };
})();

PersonModule.addPerson("Ana", 30);
PersonModule.addPerson("Mario", 25);
PersonModule.addPerson("Louise", 40);

PersonModule.getAge("Mario");

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

Дополнительные материалы