No tienes acceso a esta clase

隆Contin煤a aprendiendo! 脷nete y comienza a potenciar tu carrera

Factory pattern y RORO

11/19
Recursos

Aportes 19

Preguntas 4

Ordenar por:

Los aportes, preguntas y respuestas son vitales para aprender en comunidad. Reg铆strate o inicia sesi贸n para participar.

Al escuchar RORO fue lo primero que se me vino a la cabeza. xD

Comparto el c贸digo usando TS 馃挋

En Typescript podemos declarar interfaces (es algo as铆 como un contrato para crear un objeto), y declarar propiedades que sean opcionales con el signo de interrogaci贸n 鈥?鈥, las dem谩s ser谩n obligatorias, en caso de no cumplir con el contrato, el lenguaje te avisara antes de ejecutar el c贸digo. 馃榾

.


Factory pattern y RORO

Lectura muy mucho importante!

Elegant patterns in modern JavaScript: RORO

C贸digo Clase

/* Codigo Deep Copy */

// Requerimientos de parametros obligatorios
function requiredParam(param){
    throw new Error(param + " Campo obligatorio");
}

// Fabrica de estudiantes
function createStudent({
    name = requiredParam("name"),
    email = requiredParam("email"),
    age,
    twitter,
    instagram,
    facebook,
    approvedCourses = [],
    learningPaths = [],
} = {}) {
    return {
        name,
        age,
        email,
        approvedCourses,
        learningPaths,
        socialMedia: {
            twitter,
            instagram,
            facebook,
        },
    };
}

const carlos = createStudent({
    name: 'Carlito',
    age: 20,
    email: '[email protected]',
    twitter: 'carlitosmzz',
}); // {}

RORO PIRRORO

**RORO **= Recibir un Objecto, y Retornamos otro Objecto.

Dentro de una funci贸n, recibimos un solo par谩metro que es un objecto, el cual internamente contiene varias propiedades, con las cuales retornara otro nuevo objeto.

Este curso, de lejos, se queda como de los mejores, Juan es todo un crack, tanto ense帽ando como sabiendo que ense帽ar 馃槷

Puedes tambi茅n crear una fabrica de instancias de prototipos con esta funci贸n ejemplo:

function createNewCourse({name,school,score,lang,freeAcces}){

    return new Courses({

        name,
        school,
        score,
        lang,
        freeAcces
    })
}

7 FACTORY PATTERN Y RORO

RORO es un patr贸n de dise帽o que consiste en crear una funci贸n que devuelve un objeto.
RO -> Recibir un objeto
RO -> Retornar un objeto

function requiredParam(param){
    throw new Error(param + "missing parameter")
}

el c贸digo anterior es una funci贸n que retorna un error.

function createStudent({
    name = requiredParam("name")
    email = requiredParam("email"),
    age,
    aprrovedCourses = [],
    learningPaths = [],
    socialMedia,
} = {})

tira error cuando no estamos eenviando ninguna propiedad name o email.

Like si te gustan los frijoles tanto como a juan!! 馃槀馃槅

Espectacular revisar lo de RORO a帽adiendo los par谩metros por defecto.

Factory pattern y RORO

function requiredParam(param) {
  throw new Error(`Missing required parameter: ${param}`);
}

function createStudent({
  name = requiredParam('name'), //Mostar谩 error si est谩 vac铆o
  email = requiredParam('email'),
  age,
  twitter,
  facebook,
  instagram,
  approvedCourses = [], //valor por defecto
  learningPaths = [], //valor por defecto
} = {} /*Por defecto es un objeto vac铆o*/ ) {
  return {
    name,
    email,
    age,
    approvedCourses,
    learningPaths,
    socialMedia: {
      twitter,
      facebook,
      instagram
    },
  };
}

const juan = createStudent({
  name: 'Juan',
  email: '[email protected]',
  age: 20,
  twitter: '@fjuandc',
})

Recibir un objeto, retornar un objeto, anotado

Lo que est谩 haciendo el profe en la funci贸n createStudent, se llama destructuring, que en t茅rminos generales lo que hace es una especie de desempaquetado de las propiedades de objetos o arrays:

entonces en vez de 茅l hacer esto:

function createStudent(estudent) {
	return {
		name: student.name,
		age: student.age
		...
	}
}

lo que hace es un destructuring ese objeto student:

function createStudent({name, age, ... }) {
	return {
		name,
		age
		...
	}
}

Un enlace si quieren profundizar m谩s:

Destructuring assignment

RORO = Recibir un Objecto, y Retornar otro Objecto.
Nos ayudan a crear moldes de objeto, pero no a partir de objetos literales, sino con funciones:

function requiredParams(param) {
  throw new Error(param + ": es un par谩metro requerido")
};

function createStudent({
  name = requiredParams("name"),
  age = requiredParams("age"),
  email,
  twitter,
  instagram,
  github,
  approvedCourses = [],
  learningPaths =[],
} = {}) {
  return {
    name,
    email,
    age,
    socialMedia: {
      twitter,
      instagram,
      github
    },
    approvedCourses,
    learningPaths,
  }
};

const felipe = createStudent({
  name: "Felipe",
  email: "[email protected]",
  age: 28,
  github: 'afelipelds',
});

Creemos una funci贸n que crear谩 objetos:

-Recibe como parametro un objeto para que no importe el orden en que se env铆an las propiedades

-Igualamos el parametro a un objeto vac铆o para que no exista error en caso de que no enviemos argumentos al llamar la funci贸n.

function createStudent({
  name, 
  email, 
  age,
  twitter,
  instagram,
  facebook,
  approvedCourses = [],
  learningPaths = [],
} = {})

-Retornamos un objeto con todas las propiedades enviadas (las propiedades no enviadas seran undefined)

{
  return {
    name,
    email,
    age,
    approvedCourses,
    learningPaths,
    socialMedia: {
      twitter,
      instagram,
      facebook,
    },
  };
}

-Pero si vamos a necesitar propiedades obligatorias, por esto, cuando no se envien vamos a lanzar un error

function requiredParam(param) {
  throw new Error(param + " es obligatorio");
}
function createStudent({
  name = requiredParam("name"),
  email = requiredParam("email"),
}={})
Gracias por existir RORRO PIRRORO鉂わ笍鉂わ笍鉂わ笍

RORO patter

Es un patr贸n de c贸digo en el que se env铆a como par谩metro a una funci贸n un objeto para devolver otro objeto, y el beneficio de esto principalmente es:

  1. Enviar par谩metros de forma m谩s descriptiva
  2. Ignorar el orden en el que deben ser colocados los par谩metros

Me gustan mas las explicaciones del profesor Nicolas, mucho mas claro al usar objetos mas 鈥渞eales鈥, es decir

Edificio{
	apartamento101{
		tipoApto{
			apto: suite
		},
		familiaRamirez{
			ana{
				genero: femenino,
				nombreCompleto: Ana Ramirez,
				edad: 30
			},
			sergio{
				genero: masculino,
				nombreCompleto: Sergio Ramirez,
				edad: 32
			},
		}
	},
	apartamento201{
		...
	}

en vez de

{a:b, {juanito: juan no esjuan}

se pueden escuchar carros de formula 1 en el minuto 10:38