Git Product home page Git Product logo

code-smells's Introduction

code-smells's People

Contributors

archel avatar rachelcarmena avatar

Stargazers

 avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar

code-smells's Issues

Middle Man

Buenas le mando un cordial saludo somos estudiantes de la carrera de computacion de la ESPOL y andamos buscando repositorios que contengan diferentes tipos de code smell y con sus tecnicas de refactorizacion. Este issue es solo para dejar constancia del trabajo.
La clase console solo se encarga de delegar la accion de imprimir a la clase system, cuando esta podria ser llamada directamente. Esta clase no es mas que una cascara vacias que no tiene sentido tenerla, ya que el entender y mantenerla cuesta tiempo y dinero.
image
Beneficio de refactorizar:
• Menos complejidad del sistema al quitar una clase que no realiza nada.
• Menos acoplamiento entre clases, ya que en caso de no eliminarla cada clase que desee imprimir algo debera tener una referencia de console para poder imprimir algo.
Tecnica Remove Middle Man:
Esta clase solamente se encarga de delegar a la clase system de que imprima algo. Por ello la mejor opcion para no tener esa clase que llegar a generar alto acoplamiento entre clases, seria eliminar esos metodos y forzar al cliente a llamar los metodos directamente.
image
Con ello se puede observar que ya no sera necesario tener una referencia de la clase console de por gusto y en caso de que se deseen mas clases que deseen imprimir algo no tendran la necesidad de tener esa referencia a la clase console, dejando asi el acomplamiento entre clases al minimo.
Buenas tardes y disculpe las inconveniencias causadas.

Code Smell Switch Statement

Clase : Tenant
Code Smell: Switch Statement
• Problema presente
4. Elimina dependencia en los casos. Si se agrega otro tipo de Tenant se debería agregar mas casos al switch statement.
5. Implementacion expuesta al cliente.
• Beneficios de Refactorizar
10. Cumple el principio Solid Open/Closed Principle.
11. Mejora la adherencia al Single Responsability Principle y hace el programa mas legible.
12. Esto puede ayudar a enmascarar el propósito/implementación de métodos
Sección B
Clase Tenant

image

Sección C
Técnica de Refactorización: Replace Type Code with Strategy
Como vemos un code smell en el switch entonces vemos que se repiten los tipos de TenantType para realizar una misma actividad categorizada por su tipo por lo que mejor creamos cada tipo de Tenant para agragar modularizacion al código y en el método que tiene el code smell encapsulara su implementación al cliente.

image

Clase Abstracta TenantType

image

Clases que heredan de TenantType e implementan el método calculateDepositAfterRenting(int deposit)

image
image

image

Code Smell Duplicate Code

Clase: DistanceCalculator
Code Smell: Duplicate Code
• Problema presente

  1. Puede afectar a la comprensión de la sección del código.
  2. Puede afectar al tamaño del archivo.
  3. La repeticiones de las secciones de código pueden ocultar la manera de como difiere una de otra.
    • Beneficios de Refactorizar
  4. Simplifica la estructura de código.
  5. El código se hace mucho mas corto.
  6. Simplificación y poca longitud hace el código mucho mas legible y escalable.

Sección B
Como podemos ver en el método betweenPoints se duplica el código que se ha implementado en el método toOriginFrom

image

Sección C
Como se puede ver en esos dos métodos se repite el código usado, por lo que si reemplazamos un código por otro algoritmo nos ayuda a reducir extensiones de código y eliminar el código duplicado para darle comprensibilidad a la diferenciación de cada algoritmo.

image

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.