Skip to main content

Refactorización para implementar un patrón de diseño

El Copilot Chat puede sugerir patrones de diseño que puedes usar para mejorar el código.

El código que no sigue los patrones de diseño establecidos (como Singleton, Factory u Observer) puede generar problemas como acoplamiento estricto, falta de flexibilidad o código duplicado.

El Copilot Chat puede ayudarte a usar los patrones de diseño adecuados para que el código sea más flexible y se pueda mantener. Por ejemplo, puede recomendar la conversión de instancias repetitivas en un patrón Factory, o el uso del patrón Observer para desacoplar clases estrechamente conectadas.

Note

Las respuestas descritas en este artículo son ejemplos. Las respuestas del Copilot Chat no son deterministas, por lo que puedes obtener respuestas diferentes a las aquí mostradas.

Escenario de ejemplo

Este código de JavaScript crea tres objetos Person, cada uno con las propiedades name y age. A continuación, usa el nombre de una persona para recuperar e imprimir su edad.

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");

Indicación de ejemplo 1

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

Respuesta de ejemplo 1

Copilot sugiere los patrones siguientes:

  • Patrón Singleton: para garantizar que solo haya una instancia del objeto people.
  • Patrón Factory: para crear una fábrica para crear objetos Person.
  • Patrón Module: para encapsular el objeto people y las funciones relacionadas dentro de un módulo para evitar la contaminación del espacio de nombres global.

Indicación de ejemplo 2

Ahora puedes pedir a Copilot que implemente el patrón que consideres más adecuado.

Refactor this code using the module pattern

Respuesta de ejemplo 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");

El patrón Module mejora la organización del código y la privacidad de los datos y reduce el riesgo de conflictos de nomenclatura, lo que hace que el código sea más escalable y fácil de mantener.

Información adicional