Code Monkey home page Code Monkey logo

miw__mdw__movies's Introduction

Movies

Refactoring: Movies

Versión 1. Clase “Customer” - Método “statement()”

Smell code:

Método largo => más de 15 líneas

  • Mal reparto de responsabilidades => Falta de Cohesión
  • Imposible reutilizar para otro formato (HTML) => Inmóvil
    • copy+paste => DRY
  • Cambio de política de coste y puntos =>
    • Viscoso
  • copy+paste => multiplica y complica el mantenimiento

Refactoring:

Extraer Método => switch y código dependiente en método “amountFor” de clase Customer|

claseCustomer

Versión 2. Clase “Customer“ - Método “amountFor()“

Smell code:

  • Malos nombres => “each” y “thisAmount”

Refactoring:

  • Renombrar variable => “rental” y “result”

claseCustomer

Versión 3. Clase “Customer“ - Método “amountFor()“

Smell Code:

  • Envidia de características => get(), get(), … desde el servidor

  • Clase de Datos => get(), get(), … en el cliente Experto en Información => la clase responsable es la que tiene la información

Refactoring

  • Mover método => método “getCharge” a clase “Rental”

Versión 4. Clase “Customer“ – Método “amountFor()“

Smell Code:

  • “Innecesaria descomposición”: método privado sin justificación

Refactoring

  • Método en línea => eliminar “amountFor”

claseCustomer

Versión 5. Clase “Customer“ – Método “statement()“

Smell Code:

  • Variable temporal innecesaria => “thisAmount”

Refactoring

  • Reemplazar Temporal por Consulta => “each.getCharge()”

claseCustomer

Versión 6. Clase “Customer“ – Método “statement()“

Smell Code:

  • Método largo => más de 15 líneas

Refactoring

  • Extraer método => método “getFrequentRenterPoints()“ a clase “Rental”

Versión 7. Clase “Customer“ – Método “statement()“

Smell Code:

  • Variable temporal innecesaria => “totalAmount”

Refactoring

  • Reemplazar Temporal por Consulta => “this.getTotalCharge()”

claseCustomer

Versión 8. Clase “Customer“ – Método “statement()“

Smell Code:

  • Variable temporal innecesaria => “frequentRenterPoints”

Refactoring

  • Reemplazar Temporal por Consulta => “this.getTotalFrequentRenterPoints()”

claseCustomer

Versión 9. Clase “Rental“ – Método “getCharge()“

Smell Code:

  • Experto en la Información => la mayor parte de la información es de Movie

Refactoring

  • Mover Método => método “getCharge()” a clase “Movie”

claseCustomer

Versión 10. Clase “Rental“ – Método “getFrequentRenterPoints()“

**Smell Code:*

  • Experto en la Información => la mayor parte de la información es de Movie

Refactoring

  • Mover Método => método “getFrequentRenterPoints()” a clase “Movie”

claseCustomer

Versión 11. Clase “Movie“ – Método “getCharge()“

Smell Code:

  • Sentencia Alternativa Múltiple => el comportamiento depende de un tipo/código/...

Refactoring

  • Reemplazar Código de Tipo con Estrategia/Estado (inyección de dependencias) => Auto-encapsular campo => “priceCode”

claseCustomer

Versión 12. Clase “Movie“ – Método “getCharge()“

Smell Code:

  • Sentencia Alternativa Múltiple => el comportamiento depende de un tipo/código/...

Refactoring

  • Reemplazar Código de Tipo con Estrategia/Estado (inyección de dependencias) => Añadir nuevas clases => “Price”, “ChildrenPrice”, ...

Versión 13. Clase “Movie” - Atributo “priceCode”

Smell Code:

  • Sentencia Alternativa Múltiple => el comportamiento depende de un tipo/código/...

Refactoring

  • Reemplazar Código de Tipo con Estrategia/Estado (inyección de dependencias) => Sustituir atributo: “int priceCode” por “Price price”

claseCustomer

Versión 14. Clase “Movie” - método “getCharge()”

Smell Code:

  • Sentencia Alternativa Múltiple => el comportamiento depende de un tipo/código/...

Refactoring

  • Reemplazar Código de Tipo con Estrategia/Estado (inyección de dependencias) => Mover método: método “getCharge()” a Clase “Price”

claseCustomer

Versión 15. Clase “Price” - método “getCharge()”

Smell Code:

  • Sentencia Alternativa Múltiple => el comportamiento depende de un tipo/código/...

Refactoring

  • Reemplazar Condicional con Polimorfismo => Redefinir método “getCharge()” en clases derivadas

claseCustomer

Versión 16. Clase “Price” - método “getFrequentRenterPoints()”

Smell Code:

  • Sentencia Alternativa Múltiple => el comportamiento depende de un tipo/código/...

Refactoring

  • Reemplazar Condicional con Polimorfismo => Redefinir método “getFrequentRenterPoints()” en clases derivadas

claseCustomer

Versión 17. Clase “CustomerTest” - métodos de prueba con Tipo/Código

Smell Code:

  • Sentencia Alternativa Múltiple => el comportamiento depende de un tipo/código/...

Refactoring

  • Ocultar campo: añadir métodos “childrens()”, “regular()” y “newRelease()” en clase “MovieBuilder

claseCustomer

Versión 18. Clase “CustomerTest” - métodos de prueba con Tipo/Código

Smell Code:

  • Sentencia Alternativa Múltiple => el comportamiento depende de un tipo/código/...

Refactoring

  • Ocultar campo: desde “CustomerTest” llamar a métodos “childrens()”, “regular()” y “newRelease()” de clase “MovieBuilder”
  • Sustituir campo: atributo “priceCode” por “Price” en clase “MovieBuilder”
  • Sustituir campo: atributo “priceCode” por “Price” en clase “Movie”

Versión 19. Clase “Price” - método “getPriceCode()”

Smell Code:

  • Sentencia Alternativa Múltiple => el comportamiento depende de un tipo/código/...

Refactoring

  • Eliminar método: “getPriceCode()” de clases “Price” y “Movie”

Versión 20. Jerarquía “Price”

Smell Code:

  • Números mágilos => 2, 1.5, ...

Refactoring

  • Añadir atributo: “CHARGE”, “DAYS_RENTER_THRESHOLD”, ... en jerarquía “Price”

claseCustomer

Versión 21

claseCustomer

miw__mdw__movies's People

Contributors

unmandao avatar

Watchers

 avatar

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.