Herramientas de usuario

Herramientas del sitio


ada:howto:sicoferp:factory:solid

Diferencias

Muestra las diferencias entre dos versiones de la página.

Enlace a la vista de comparación

Próxima revisión
Revisión previa
ada:howto:sicoferp:factory:solid [2023/11/07 13:28]
192.168.175.10 creado
ada:howto:sicoferp:factory:solid [2023/11/07 14:54] (actual)
192.168.175.10
Línea 1: Línea 1:
 ====== Buenas prácticas de desarrollo de software: Principios SOLID ====== ====== Buenas prácticas de desarrollo de software: Principios SOLID ======
-Esta sección presenta una introducción a los 5 principios SOLID los cuales ayudan a desarrollar sotfware de calidad.+Esta sección presenta una introducción a los 5 principios ​**SOLID** los cuales ayudan a desarrollar sotfware de calidad.
  
-Cuando se trata del diseño y desarrollo de aplicaciones,​ los '​Principios SOLID' son un conjunto de conceptos esenciales que debes tener en tu repertorio como fundamentos clave en la arquitectura y creación de software.+Cuando se trata del diseño y desarrollo de aplicaciones,​ los '**Principios SOLID**' son un conjunto de conceptos esenciales que debes tener en tu repertorio como fundamentos clave en la arquitectura y creación de software.
  
-SOLID es un acrónimo creado por Michael Feathers, que se basa en los principios de la programación orientada a objetos compilados por Robert C. Martin en su artículo de 2000, titulado '​Design Principles and Design Patterns'​. Estos principios sientan las bases para el desarrollo de software de alta calidad y mantenible en el mundo de la programación orientada a objetos((https://​profile.es/​blog/​principios-solid-desarrollo-software-calidad/​)).+**SOLID** es un acrónimo creado por **Michael Feathers**, que se basa en los principios de la programación orientada a objetos compilados por **Robert C. Martin** en su artículo de 2000, titulado '**//Design Principles and Design Patterns//**'. Estos principios sientan las bases para el desarrollo de software de alta calidad y mantenible en el mundo de la programación orientada a objetos((https://​profile.es/​blog/​principios-solid-desarrollo-software-calidad/​)).
  
-Los 5 principios SOLID de diseño de aplicaciones de software son:+Los 5 principios ​**SOLID** de diseño de aplicaciones de software son:
  
-  * S – Single Responsibility Principle (SRP) +  ​* **S** – //Single Responsibility Principle// (SRP) 
-  * O – Open/Closed Principle (OCP) +  ​* **O** – //Open/Closed Principle// (OCP) 
-  * L – Liskov Substitution Principle (LSP) +  ​* **L** – //Liskov Substitution Principle// (LSP) 
-  * I – Interface Segregation Principle (ISP) +  ​* **I** – //Interface Segregation Principle// (ISP) 
-  * D – Dependency Inversion Principle (DIP)+  ​* **D** – //Dependency Inversion Principle// (DIP)
  
-===== ¿Que es Clean Code? ===== +===== S - Principio de responsabilidad única ​===== 
-El código limpio no se basa en reglas rígidas, sino en una serie de principios ​que promueven la creación de un código intuitivo ​fácil de modificar. En este contextola intuición implica que cualquier profesional de desarrollo pueda comprenderlo de inmediatoUn código que es fácilmente adaptable presenta las siguientes características:​+El Principio ​de Responsabilidad Única establece ​que una clase debe desempeñar una única función ​y, en consecuencia,​ tener un solo motivo para cambiar.
  
-  * El flujo de ejecución del programa sigue una lógica ​clara y tiene una estructura sencilla. +Para expresar este principio en términos más técnicos: Solo debería ser posible que un cambio potencial, como alteraciones en la lógica ​de la base de datos o en la lógica de registroafecte la especificación de una clase.
-  * Las relaciones entre las distintas partes del código son transparentes. +
-  * La función ​de cada clasefunción, método y variable es evidente a simple vista.+
  
-Un código se considera fácil de modificar cuando es flexible y extensiblelo que facilita la corrección ​de posibles errores. Por estas razones, el código limpio resulta sencillo ​de mantener y exhibe las siguientes cualidades:+En otras palabrassi una clase representa una entidad o un contenedor ​de datoscomo una clase "​Libro"​ o "​Estudiante,"​ y contiene campos relacionados con esa entidad, solo debería requerir modificaciones cuando ​el modelo ​de datos subyacente cambie.
  
-  * Las clases y los métodos son concisos y, siempre que sea posible, tienen una única ​función bien definida. +Es fundamental adherirse al principio de responsabilidad ​única ​por varias razonesEn primer lugaren proyectos donde múltiples equipos pueden trabajar en la misma clase por diversas razones, no seguir este principio podría resultar en módulos incompatibles.
-  * Las clases y los métodos son predeciblesoperan de acuerdo a las expectativas y se acceden a través de API (interfaces) claramente documentadas. +
-  * El código ha sido sometido a pruebas unitarias.+
  
-Las ventajas de este enfoque de programación son evidentes: el código limpio se vuelve independiente del desarrollador que lo creó. ​En esenciacualquier programador puede trabajar con él, lo que evita los problemas asociados con el código heredadoAdemás, el mantenimiento del software se simplificaya que los errores son más fáciles ​de identificar y corregir((https://​www.ionos.es/​digitalguide/​paginas-web/​desarrollo-web/​clean-code-que-es-el-codigo-limpio/​)).+En segundo lugarfacilita ​el seguimiento de versionesPor ejemplosi observamos cambios en un archivo en las confirmaciones de GitHub y seguimos ​el Principio de Responsabilidad Únicapodemos inferir ​que esos cambios están relacionados con el almacenamiento o cuestiones vinculadas a la base de datos.
  
-===== 7 Reglas principales del Clean Code =====+Además, este enfoque también reduce los conflictos de fusión. Los conflictos suelen surgir cuando diferentes equipos modifican el mismo archivo, pero al adherirse al Principio de Responsabilidad Única, los conflictos se minimizan, ya que los archivos solo tienen un motivo para cambiar, lo que simplifica la resolución de conflictos.
  
-==== 1. La importancia ​de los nombres ​==== +===== O - Principio ​de apertura y cierre ===== 
-La elección ​de nombres desempeña un papel fundamental en la comprensión de un código, ya sea para variables, funciones, parámetros, ​clases ​o métodosAl seleccionar un nombre, es esencial considerar dos aspectos clave:+El principio ​de apertura y cierre establece que las clases ​deben ser abiertas a la extensión y cerradas a la modificación.
  
-Debe ser preciso y expresar ​la idea central ​de manera directa. +La '​modificación'​ se refiere a cambiar el código de una clase existente, mientras que la '​extensión'​ implica agregar nuevas funcionalidades. En resumen, este principio promueve ​la idea de que debemos poder introducir nuevas funciones sin necesidad de alterar el código preexistente de una claseEsto se debe a que cada vez que modificamos el código existente, corremos el riesgo de introducir posibles errores. Por lo tanto, ​es aconsejable evitar tocar el código de producción que ya ha sido probado y es confiable en su mayoría.
-No temas usar nombres largos si ello es necesario para representar con claridad la función o propósito.+
  
-==== 2Regla del boy scout ==== +Puede preguntarse cómo es posible agregar nueva funcionalidad sin modificar la clase originalPor lo general, esto se logra mediante ​el uso de interfaces y clases abstractas, ​que permiten extender y agregar nuevas capacidades a las clases existentes sin cambiar su implementación subyacente.
-Esta regla se basa en la idea de que, al salir de un área de acampada, debes dejarla más ordenada de lo que la encontraste. En el ámbito de la programación, esto se traduce en dejar el código más limpio ​de lo que estaba antes de editarlo.+
  
-==== 3. Sé el autor auténtico del código ​==== +===== L - Principio de sustitución de Liskov ===== 
-El código es una narrativa, y los programadores son los autores ​de esta historia. Para estructurar un código limpio, es fundamental crear funciones simples, claras y concisasDos reglas orientadoras son:+El Principio ​de Sustitución de Liskov establece que las subclases deben ser intercambiables por sus clases base.
  
-  * Mantén las funciones pequeñas. +En otras palabras, si la clase B es una subclase de la clase Adeberíamos poder utilizar un objeto de la clase B en lugar de un objeto de la clase A en cualquier contexto, como un método que espera un objeto de la clase A, sin experimentar resultados inesperados.
-  * Y, si es posibleaún más pequeñas.+
  
-Es importante no confundir "​**nombre**"​ con "​**función**"​Como se mencionó en el primer principio, los nombres largos no son un problema, pero las funciones deben mantenerse breves.+Este comportamiento es el esperado ya que cuando aplicamos la herencia, suponemos que la clase hija hereda todas las características de la clase madreLa clase hija puede extender ​el comportamiento, pero nunca debe reducirlo.
  
-==== 4. DRY (No te repitas) ==== +Cuando una clase no cumple con este principio, ​puede llevar a errores inesperados y difíciles de detectar ​en el código.
-Este principio, ​acuñado ​en el libro "//​**The Pragmatic Programmer**//,"​ se aplica a diversas áreas de desarrollo, como:+
  
-  * Bases de datos +===== I - Principio ​de segregación de interfaces ===== 
-  * Pruebas +La segregación implica la separación ​de elementosy el Principio de Segregación de Interfaces se enfoca en la separación ​de interfaces.
-  * Documentación +
-  * Codificación +
-  +
-**DRY** defiende que cada elemento del conocimiento del sistema debe ser único y exento ​de ambigüedadesevitando así la duplicación ​de funcionalidades.+
  
-==== 5. Comentar con moderación ==== +Este principio defiende que es preferible tener múltiples interfaces específicas para los clientes ​en lugar de una única interfaz general. La idea es no obligar a los clientes ​implementar funciones ​que no necesitan ni utilizarán.
-Los comentarios ​en el código deben ser utilizados con moderación y solo cuando sean realmente necesarios. Según la perspectiva ​de **Uncle Bob**, ​los comentarios pueden inducir ​error, ya que suelen quedar obsoletos al modificarse el código. Por lo tanto, si se opta por comentar, debe ser de manera esencial y revisada conjuntamente con la versión del código.+
  
-==== 6. Manejo ​de errores ​==== +===== D - Principio de inversión ​de dependencia ===== 
-El autor **Michael Feathers** destacó la importancia ​de tratar adecuadamente las excepciones en el desarrollo web. Los programadores son responsables ​de garantizar ​que el código siga funcionando incluso cuando surgen problemas. Tratar las excepciones ​de manera correcta es un aspecto clave en este proceso.+El principio ​de inversión ​de dependencia establece ​que nuestras clases deben depender ​de interfaces o clases abstractas ​en lugar de depender de clases y funciones concretas.
  
-==== 7Pruebas limpias ==== +En su artículo de 2000, **Robert CMartin** resume este principio ​de la siguiente manera
-La realización ​de pruebas es una etapa crucial en la programación,​ y solo un código que ha pasado pruebas limpias puede considerarse verdaderamente limpio. Para ello, se deben cumplir ciertas reglas:+
  
-  * **Rápido**:​ Las pruebas deben ejecutarse rápidamente ​en cualquier momento+> "//Si el Principio de Apertura ​Cierre establece el objetivo de la arquitectura orientada a objetos, el Principio de Inversión de Dependencia establece el mecanismo principal//"​.  
-  * **Independiente**:​ Las pruebas deben ser independientes para evitar efectos en cascada en caso de fallo+ 
-  * **Repetible**:​ Deben ser repetibles en diferentes entornos. +Estos dos principios están estrechamente relacionados,​ y ya hemos aplicado este patrón al discutir el Principio ​de Apertura y Cierre
-  * **Autovalidación**:​ Las pruebas bien escritas devuelven respuestas claras (verdadero o falso) ​para evitar subjetividades ​en los errores. + 
-  * **Puntual**:​ Las pruebas deben ser escritas antes del código mismo, siguiendo estrictamente el criterio ​de puntualidad.+El objetivo es que nuestras clases estén abiertas a la extensión, por lo que reestructuramos nuestras dependencias ​para que dependan de interfaces ​en lugar de depender de clases y funciones concretas.
  
-El **Clean Code** es un concepto arraigado que resuelve de manera eficiente uno de los principales desafíos que enfrentan muchos proyectos de desarrollo de sistemas: el mantenimiento((https://​www.hostgator.mx/​blog/​clean-code-codigo-limpio/​)). 
  
 [[ada:​howto:​sicoferp:​factory:​goodsoftwaredevelopmentpractices|←Volver atras]] [[ada:​howto:​sicoferp:​factory:​goodsoftwaredevelopmentpractices|←Volver atras]]
  
ada/howto/sicoferp/factory/solid.1699363733.txt.gz · Última modificación: 2023/11/07 13:28 por 192.168.175.10