Patrones de Diseño: Patrón de Proxy (Página 3)

Con un objeto Proxy, tenemos más control sobre las interacciones con ciertos objetos. Un objeto proxy puede determinar el comportamiento cada vez que interactuamos con el objeto, por ejemplo cuando obtenemos un valor o establecemos un valor.


En términos generales, un apoderado significa un sustituto de otra persona. En lugar de hablar con esa persona directamente, hablará con la persona apoderada que representará a la persona con la que intenta comunicarse. Lo mismo sucede en JavaScript: en lugar de interactuar directamente con el objeto de destino, interactuaremos con el objeto Proxy.

const person = {
name: "John Doe",
age: 42,
nationality: "American",
};

En lugar de interactuar directamente con este objeto, queremos interactuar con un objeto proxy. En JavaScript, podemos crear fácilmente un nuevo proxy creando una nueva instancia de Proxy .

const person = {
name: "John Doe",
age: 42,
nationality: "American",
};
const personProxy = new Proxy(person, {});

El segundo argumento de Proxy es un objeto que representa al controlador . En el objeto controlador, podemos definir un comportamiento específico según el tipo de interacción. Aunque hay muchos métodos que puedes agregar al controlador de Proxy, los dos más comunes son get y set :

  • get : Se invoca al intentar acceder a una propiedad.
  • set : Se invoca al intentar modificar una propiedad.

En lugar de interactuar con el person objeto directamente, interactuaremos con el personProxy .

Agreguemos controladores al personProxy Proxy. Al intentar modificar una propiedad, invocando así el set método en Proxy , queremos que el proxy registre el valor anterior y el nuevo valor de la propiedad. Al intentar acceder a una propiedad, invocando así el get método en Proxy , queremos que el proxy registre una oración más legible que contenga la clave y el valor de la propiedad.

const personProxy = new Proxy(person, {
get: (obj, prop) => {
console.log(`The value of ${prop} is ${obj[prop]}`);
},
set: (obj, prop, value) => {
console.log(`Changed ${prop} from ${obj[prop]} to ${value}`);
obj[prop] = value;
},
});

Al acceder a la name propiedad, el Proxy devolvió una frase que suena mejor: The value of name is John Doe .

Al modificar la age propiedad, el Proxy devolvió el valor anterior y nuevo de esta propiedad: Changed age from 42 to 43 .


Un proxy puede resultar útil para agregar validación . Un usuario no debería poder cambiar person la edad de a un valor de cadena ni darle un nombre vacío. O si el usuario está intentando acceder a una propiedad del objeto que no existe, debemos informarle.

const personProxy = new Proxy(person, {
get: (obj, prop) => {
if (!obj[prop]) {
console.log(
`Hmm.. this property doesn't seem to exist on the target object`
);
} else {
console.log(`The value of ${prop} is ${obj[prop]}`);
}
},
set: (obj, prop, value) => {
if (prop === "age" && typeof value !== "number") {
console.log(`Sorry, you can only pass numeric values for age.`);
} else if (prop === "name" && value.length < 2) {
console.log(`You need to provide a valid name.`);
} else {
console.log(`Changed ${prop} from ${obj[prop]} to ${value}.`);
obj[prop] = value;
}
},
});

El proxy se aseguró de que no estuviéramos modificando el person objeto con valores defectuosos, lo que nos ayuda a mantener nuestros datos puros.


Reflect

JavaScript proporciona un objeto integrado llamado Reflect , que nos facilita la manipulación del objeto de destino cuando trabajamos con servidores proxy.

Anteriormente, intentamos modificar y acceder a las propiedades del objeto de destino dentro del proxy obteniendo o configurando directamente los valores con notación entre corchetes. En su lugar, podemos usar el Reflect objeto. Los métodos del Reflect objeto tienen el mismo nombre que los métodos del handler objeto.

En lugar de acceder a las propiedades obj[prop] o establecer propiedades mediante obj[prop] = value , podemos acceder o modificar las propiedades del objeto de destino mediante Reflect.get() y Reflect.set() . Los métodos reciben los mismos argumentos que los métodos del objeto controlador.

const personProxy = new Proxy(person, {
get: (obj, prop) => {
console.log(`The value of ${prop} is ${Reflect.get(obj, prop)}`);
},
set: (obj, prop, value) => {
console.log(`Changed ${prop} from ${obj[prop]} to ${value}`);
Reflect.set(obj, prop, value);
},
});

Compensaciones

Los proxies son una forma poderosa de agregar control sobre el comportamiento de un objeto. Un proxy puede tener varios casos de uso: puede ayudar con la validación, el formateo, las notificaciones o la depuración.

El uso excesivo del Proxy objeto o la realización de operaciones intensas en cada handler invocación de método pueden afectar fácilmente el rendimiento de su aplicación de forma negativa. Es mejor no utilizar servidores proxy para código crítico para el rendimiento.

Relacionado

ForEach de Javascript: Array para bucles

Como una de las estructuras de control básicas en la programación, los bucles son casi una adición diaria al código que escribimos. El bucle forEach clásico es uno de los primeros fragmentos de código que aprendemos a escribir como programadores. Si fueras un desarrollador de Javascript, sabrías que Javascript no es ajeno a la iteración a través de los elementos de una matriz o un mapa ¡SEGUIR LEYENDO!

10 Mejores alternativas de Sci-hub para descargar artículos de investigación gratis

Como sabemos, Sci-hub es un sitio web increíble con millones de artículos de investigación para todos los estudiantes universitarios y académicos. El sitio web de Sci-Hub se encarga de obtener los artículos de investigación y artículos de pago utilizando las credenciales que se filtran. La fuente de credenciales utilizada por este sitio web no está clara. Sin embargo, se supone que muchas de ellas son donadas, ¡SEGUIR LEYENDO!

10 Características Sorprendentes de Windows que Deberías Conocer en 2024

Aunque haya sido usuario de Windows durante décadas, el sistema operativo es tan amplio y complejo que siempre existen características útiles, pero menos conocidas, que podrían sorprenderte. En este sentido, he identificado diez funciones poco conocidas de Windows que pueden potenciar su eficiencia, comodidad e incluso su experiencia de uso lúdico en su PC.

Microsoft Surface Go 2 - Portátil 2 en 1 de 10.5 pulgadas Full HD, Wifi, Intel...
  • Procesador Dual-Core Intel Pentium Gold 4425Y (2...
  • Memoria RAM de 8 GB LPDDR3
  • Disco SSD de 128 GB
Todas estas características deberían ser compatibles tanto con Windows 10 ¡SEGUIR LEYENDO!

10 Criptomonedas con Potencial de Crecimiento de Futuro

El rumor en torno a las criptomonedas no se desvanece por mucho que existan grandes pesimistas alrededor de los malos rumores. Entonces, si consideras invertir en el mundo de las criptomonedas, deberías estar atento a las criptomonedas que se espera que tengan un buen desempeño para el resto de 2021. En los últimos tiempos, los tokens DeFi están recibiendo toda la atención y es más que ¡SEGUIR LEYENDO!

10 Empresas de robótica más importantes del mundo

Los cambios de paradigma revolucionarios debido a los desarrollos de la robótica en todo el mundo están generando nuevos puntos de vista en muchos sectores, entre ellos en los de la industria y la tecnología. Con la ayuda de la Inteligencia Artificial, la tecnología produce resultados innovadores cada segundo y el campo de la robótica define y reconfigura su uso a cada instante. Cada día que ¡SEGUIR LEYENDO!

10 Frameworks que los Desarrolladores de Software deberían Aprender 2024

Bienvenidos desarrolladores web y de software, estamos en los inicios de 2023 y es posible que muchos se esten planteado sus objetivos para lo largo del año. Con anterioridad ya he compartidos las rutas de aprendizaje para un desarrollador front-end, un desarrollador full-stack o un desarrollador back-end entre otros muchos contenidos más. En este artículo, me gustaría compartir algunos de los mejores frameworks y bibliotecas para ¡SEGUIR LEYENDO!

10 Repositorio de GitHub que todo Desarrollador Web debería conocer

GitHub es el lugar que debes buscar cuando intentas mejorar como desarrollador, toda la información que necesitas está disponible en algún repositorio que alguien ya se ha molestado en indexar. Sin embargo, la parte complicado es encontrar el repositorio más adecuado. Es fácil sentirse perdido en todos los repositorios disponibles dentro de GitHub. Para ayudarte, he elaborado una lista de 10 repositorios de GitHub que pueden ¡SEGUIR LEYENDO!

10 Mejores billeteras sin custodia

Si se quiere lograr que DeFi tenga éxito, es crucial que las puertas de enlace para interactuar con la web 3 sean intuitivas, seguras y accesibles, manteniendo el espíritu central de ser el banco del futuro. En los últimos años, hemos visto mejoras drásticas en las carteras y otras herramientas de gestión de activos, lo que permite a los inversores y usuarios acceder de forma segura ¡SEGUIR LEYENDO!

21 Mejores Frameworks de Java

Si recién comienzas a programar con Java, puedes oje la guía para principiantes sobre Java que te guiará a través de todos los conceptos más importantes de Java que necesitas conocer, si pronto quieres comenzar a utilizar cualquier de los frameworks Java. Java es un lenguaje robusto y combinado con un framework Java, puede proporcionar las mejores soluciones para cualquier campo tecnológico, ya bien sea; un ¡SEGUIR LEYENDO!

11 Mejores Herramientas de Automatización de Pruebas para Interfaces de Usuario

¿Eres un profesional del testing y las pruebas de software? Si es así, ¿Qué herramienta de pruebas utilizas? Como la mayoría de las personas cuando comienzan en el control de calidad. es posible que tenga que dominar solo una o dos herramientas de prueba porque estás restringido a lo que estás utilizando en la empresa. Cualquiera que sea la razón, si usted es un profesional experimentado, ¡SEGUIR LEYENDO!

10 Mejores robots amigos que aparecen en películas (incluido Jeff de Finch)

Como demuestra la nueva película Finch de Apple+, los robots son excelentes amigos y hay bastantes memorables que aparecen en numerosas películas. 1. Baymax (Big Hero 6) Al igual que Pixar, Disney tiene la capacidad de crear personajes no humanos que sin embargo, tienen una gran cantidad de carisma y personalidad. Baymax, uno de los personajes principales de la película Big Hero 6 , es un ¡SEGUIR LEYENDO!