No tienes acceso a esta clase

¡Continúa aprendiendo! Únete y comienza a potenciar tu carrera

No se trata de lo que quieres comprar, sino de quién quieres ser. Invierte en tu educación con el precio especial

Antes: $249

Currency
$209

Paga en 4 cuotas sin intereses

Paga en 4 cuotas sin intereses
Suscríbete

Termina en:

12 Días
10 Hrs
10 Min
22 Seg

Reusabilidad

6/14
Recursos

Aportes 26

Preguntas 0

Ordenar por:

¿Quieres ver más aportes, preguntas y respuestas de la comunidad?

Niveles de reusabilidad:

  • Primer nivel (Clases y funciones) --> Ingredientes de la lasagna

  • Segundo nivel (Patrones de diseño, ¿Cómo usar las funciones y de que forma se vana conectar?) --> Receta de la lasagna

  • Tercer nivel (Frameworks, convenciones ¿Como manejar las rutas, peticiones, etc.) --> Lasagna congelada de tu preferencia.

Reusabilidad

  • Ventajas: Reducción de costos y de tiempos para lanzar un producto, libera recursos para tareas más cruciales.
  • Consideraciones: Eliminar la duplicación y crear una abstracción (DRY)
    • Algunas partes no deberían ser abstraídas
    • el código pude volverse innecesariamente complejo

Niveles de reusabilidad con una lasagna:

  • Primer nivel Ingredientes de la lasagna → Clases y funciones
  • Segundo nivel Receta de la lasagna → Patrones de diseño (¿Cómo usar las funciones y de que forma se van a conectar?)
  • Tercer nivel Lasagna congelada → Frameworks, convenciones (¿Como manejar las rutas, peticiones, etc.)

Ejemplo de reusabilidad:

Servicios que dependen de un módulo, pero si ese módulo cambia hay que cambiar todos los servicios que lo usan.

Ahora ese servicio usa una interfaz que usa ese módulo, por lo que si cambia el módulo solo cambiamos la interfaz y no todos los servicios.

El ejemplo de la abstracción utilizada en esta clase me recuerda mucho a los principios SOLID. Dentro de estos principios, hay uno muy famoso que es el de “Open-Close principle”.
Lo que este principio quiere decir es que el código debería estar abierta a la extensión, pero cerrado a la modificación.
.
Si nosotros tenemos código que ya existe y funciona, al momento de agregar una nueva funcionalidad en el software, este no debería ser modificado, sino más bien, debería ser fácilmente extensible.
El único pequeño gran problema, es que no es tan sencillo como parece. Una de las técnicas utilizadas es crear una abstracción como la vista en esta clase.
.
httpGateway es un módulo del cual dependen más de un servicio que utilizan servicios http. Si nosotros queremos agregar una nueva funcionalidad que utilice http. Podemos agregar un nuevo método a httpGateway. Este nuevo método va poder ser usado por todos los servicios que consumen a nuestra abstracción.
De esa forma el código es más fácil de extender, sin la necesidad de ser modificado.

Profesor! este curso esta buenísimo

¿Qué será mas grave/común que cambie?

A mi parecer, La abstracción es lo que mas comúnmente puede y deberá cambiar. Así mismo, el módulo puede cambiar por motivos de solución de bugs, extensión de sus funcionalidades u optimización lo cual puede ser grave si no utilizamos una abstracción propia de nuestro proyecto para controlarlo.

Reusabilidad:

  • Reduce: Costo y tiempo
  • Beneficia a otras áreas
  • Innovaciones e iteraciones
    pero…
  • No siempre es ideal
  • Puede generar complejidad


Niveles de Reusabilidad:

  • Primer nivel: Clases y funciones (la expresión mínima de un programa)
  • Segundo nivel: Patrones de diseño (pueden variar)
  • Tercer nivel: Frameworks (facilitarse la vida)

La reusabilidad puede ser muy perjudicial cuando se lleva al extremo, por ejemplo, el tema de tipado de Typescript es muy común encontrarse dilemas si solo copiar tipos o abstraerlos para hacerlos reusables, lo cual se vuelve muy complejo fácilmente, debido a que es fácil caer en el error de hacer sobre ingeniería a dar tipado correctamente, en lugar de centrarse en el código como tal.

solo un comentario que se me ocurrió

  • comienzas desde lo mas básico. Como la materia prima -> variables,funciones
  • lo agrupas en elementos que puedes reutilizar -> clases
  • y esos elementos puedes acomodarlos para buscar solucionar un problema -> patrones de diseño
  • y finalmente un conjunto de soluciones puede formar una herramienta nueva -> frameworks

Soy nuevo en el mundo de desarrollo y trabajo sobre un software ya en produccion y siempre que tengo una nueva asigancion lo primero que hago es tratar de encontrar como reutilziar codigo ya existente y si no es posible lo neuvo que desarrollo lo hago pensnando DRY. debido a que tienod mucho a fallar en esto.

**DRY (Don't Repeat Yourself)**: Cuando sientas que una tarea se está volviendo repetitiva, por ejemplo una pieza de código que sientes que la estas escribiendo una y otra vez, para un segundo y considera plantearte si ésta tarea se podría facilitar haciendo una separación que pueda ser reusable en ésta y las demás partes en donde se ha implementado. Aquí es donde viene la parte de la **Abstracción**; De lo complejo, captar la escencia o idea principal y reducirlo a algo más simple, adapta ese código para que pueda ser utilizado en esos diferentes escenarios. Claro que debe haber un balance como lo comenta el profe, esto no significa que abosolutamente todo se tenga que abstraer para ser re-utilizado "por si a caso". Y se preguntará uno, de qué manera puedo hacer esa abstracción? cómo puedo saber cual es el mejor acercamiento que puedo tener para cierto problema? es ahí cuando debes pensar justo en esos patrones de diseño, que son instrucciones que han sido estudiadas y comprobadas para problemas muy comunes en el diseño de software. Estoy lejos de ser un experto, por eso estoy tomando este curso, pero les quería dejar este razonamiento mío porque si hago retrospectiva en base a mis experiencias trabajando como programador, el estar aprendiendo todos estos conceptos que van mas allá de escribir código como un robot, me hace darme cuenta de cómo es que uno interactúa con todos estos temas en su día a día sin darse cuenta y lo importante que es saber identificarlos, es así como uno va creciendo y pasando de Jr a SSR, y de SSR a SR y así sucesivamente :)
Desde comencé en Programación Web utilice el concepto de Do not Repeat, ya que usaba Django para programar y fue creado bajo esa prémisa. Uno de los principales fuertes de los cuales cuenta dicho Framework es el tema de la "escalabilidad", ya que fácilmente un sistema se puede convertir en un módulo debido a que es fácilmente escalable.
Yo creo que la reusabilidad es fabulosa, siempre y cuando esos componentes reutilisables usen bien hechos y que tengan siempre un fin común, por ejemplo, si se utiliza para mostrar una tabla, para mostrar una lista de datos, una galería de imágenes, ¿quien sabe?, pero si que sea bien definido con que fin lo vamos a usar, porque no todo se puede reutilizar.

Dios mío esto es genial, desde esta clase empieza lo bueno.
Los cursos de patrones de diseño deberían estar antes de los de frameworks, pero como ya no existen las antiguas escuelas de platzi supongo que es difícil acomodar cursos dentro de las nuevas escuelas de platzi que contienen rutas.

Lo mismo está pasando con los cursos de algoritmos, y estos cursos de patrones de diseño igual, no están en ninguna ruta y al menos que llegues a buscarlos directamente no te das cuenta de que existen.

Lo cual a su vez limitan su alcance, y como ya paso con otros cursos, si no llaman la atención, no se seguirán produciendo, como los cursos de C, A un nuevo curso de CSS también le pasa.

Genial el curso, ha despejado muchas dudas

Esa pregunta del final de la clase me hizo plantearme mi existencia entera…
Yo facilmente hubiese hecho una abstraccióna sí como la de HttpGateway, pero, es mucho más probable que mi abstracción cambie antes de que lo haga el modulo http.

Si si la he utilizado desgraciadamente en el desarrollo para los jefes que imponen sus deadlines a veces no es posible pues lo importante es salir en tiempo con pruebas funcionales.

Se que es una mala practica pero prefiero tener código repetido que funciona a una método que no.

yo en lo personal procuro alejarme de las abstracciones complejas!! Especialmente por casos particulares donde no son utiles
sin saber de patrones, en mismproyectos siempre me creé un archivo MyRest con todos los verbos, porqueasi centralizó las configuraciones de peticiones rest
1. **Reusabilidad** **Reusabilidad: Lo positivo** 1. Reducción de: 1. Costos. 2. Tiempos para lanzar un producto. 2. Libera recursos para tareas más cruciales como el marketing.  3. ¿Por qué reinventar la rueda? No se debe reinventar algo que ya esta creado y que ha dado resultados. **Reusabilidad: Lo complejo** 1. Eliminar una duplicación y crear una abstracción (DRY): 1. Algunas partes no deberían ser abstraídas. 2. El código puede volverse innecesariamente complejo (acoplamiento).   **Niveles de Reusabilidad** *Primer nivel: Clases/Funciones* Las clases y funciones son los elementos más pequeños de la reusabilidad, una clase debe hacer una sola cosa pero debe hacerlo bien.  *Segundo nivel: Patrones de diseño* Se refiere a los pasos a seguir para lograr el producto final.  *Tercer nivel: Frameworks* Se refiere a las diferentes herramientas ya definidas que se utilizan para la construcción de software, ejemplo: Flask, Django, Nest, Rails, etc Se debe considerar los niveles de abstracción para lograr la reusabilidad adecuada.
Según investigo, la reutilización de la reusabilidad en exceso o inapropioada si puede ser perjudicail en algunos casos, tales como: * Acomplamiento no deseado. * Sobregeneralización. * Perdida de rendimiento.
He tenido ocaciones donde el mismo desarrollo se complica o extiende demasiado, en pro de ser lo más reutilizable posible, cuando la solución más sencilla tal vez está en medio de "Costo" y "Beneficio" o entre hacerlo fácil y hacerlo supremamente reutilizable.
En mi grupo de trabajo solíamos decir: Si vas a usar un mismo bloque de código **más de una vez**, conviértelo en una función global. Así realizábamos a abstracción en un proyecto orientado a funciones. Sin embargo, al ignorar la regla de "módulos que realicen una sola cosa", terminábamos con funciones que hacían muchas cosas y requerían muchos argumentos, lo que les quitaba su atractivo funcional.
Para mejorar ese producto, no es reinventar la rueda, es hacer ese producto mejor, por eso salen nuevos Frameworks y nuevos JS Runtimes

Creo que se me dificultó un poco con el ejemplo de la lasagna

¡Hola!

Algo de lo que he aprendido en toda mi ruta de aprendizaje es que una buena práctica puede ser relativa, puede depender del contexto o puede depender del programador, el principio DRY es un principio que he tratado de aplicar en mi código desde que empecé a programar, pero hay algo que es muy cierto y es, no siempre puede ser bueno abstraer, con tantas abstracciones le añadimos mucha complejidad al código, por esta razón DRY es un principio y no una regla, se recomienda que se aplique pero habrán ocasiones que no sea bueno aplicarlo, lo que más importa al final es no añadirle una complejidad innecesaria a nuestro código, el código que escribimos debemos de escribirlo para que en un futuro alguien más o nosotros mismos lo lleguemos a leer, por lo que debemos de tener un código limpio, organizado y que se auto-explique sólo sin tanta complejidad.

P.D.: Paso a recomendarles un curso en udemy que trata también este tema: Principios SOLID y Clean Code, no es muy costoso, cuándo lo compré, me salió por 10 USD apróximadamente y se complementa muy bien con este curso.

KISS over DRY

(keep it simple)