Giter VIP home page Giter VIP logo

gym's People

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar

gym's Issues

Implementar Patrón de diseño Decorator

public String fechaLatina(){

Se puede usar el patrón Decorator en la clase Fechas ya que hay métodos adicionales de la fecha normalmente por ende estos métodos serían una función adicional a la clase base que sería la clase fecha, es decir, se utiliza el patrón Decorator para agregar características adicionales a un objeto de manera flexible y modular, sin necesidad de modificar la estructura de la clase original.

Una posible solución de implementación Decorator podrías ser la siguiente:
Imagen1
Imagen2
Imagen3
Imagen5
Imagen6

Implementar Patron de Diseño Strategy

En la clase de Reportes podrías implementar el patrón de diseño Strategy ya que de está forma se puede cambiar la estrategia de generar el reporte y si en un futuro se desea agregar una nueva opción para generar un reporte este no afectaría ya que no se modificaría el código existente, siendo así un código flexible.
Una solución podría ser la siguiente, se separo en reporte y reportecliente ya que no va a compartir la misma información.
Imagen1
Imagen2
Imagen3
Imagen4
Imagen5

Recomendaciones para aplicar principios SOLID

En la clase Fecha no se cumple el principio de open-closed (OPC) y en parte el principio de responsabilidad simple (SRP), ya que la clase Fecha además de encargarse de la recepción del día, mes y año, se está encargando de la creación del formato de dichas fechas a fecha latina y fecha europea. ¿Y si se requiere presentar la fecha en el formato asiático, africano, o algún país que tiene su propio formato de fecha? Si seguimos para haciendo métodos por cada formato de fecha, sobrecargaríamos aún más la clase. Para cumplir con OCP y SRP en la clase Fecha se propuso crear el método abstracto getFecha () para que pueda ser sobrescrito en las clases hijas de la clase Fecha, así podremos crear tantas clases de acuerdo al formato de fecha de un determinado continente o país. De esta manera, hacemos que el código sea abierto a extensiones y cerrado modificaciones.

  • Rediseño Clase Fecha
    image

  • Nueva clase: FechaLatina
    image

  • Nueva clase: FechaEuropea
    image

  • Diagrama: Rediseño clase Fechas
    image

Por otra parte, la clase Foto está dependiendo de una clase de bajo nivel que se encarga de conectar el programa con la base de datos SQL, la cual se está instanciando en el constructor de la clase Foto y utilizando posteriormente. Para que clase Foto cumpla con el principio de dependencia inversa (DIP), como primer paso debemos depender de abstracciones en lugar de elementos concretos.

  • Interfaz ConexionInterface
    image

  • Clase Conexión
    image

De esta forma estamos adicionando una capa de abstracción a nuestra aplicación, la cual nos permite depender únicamente de la interfaz en lugar de su implementación concreta. Posteriormente, debemos evitar crear las clases concretas en el constructor de la clase Foto de tal manera que estas sean pasadas desde el constructor.

  • Implementación en la clase Foto
    image
  • Diagrama: Rediseño clase Foto
    image

Las clases Cliente, Pagos, Membresia y Ficha tienen responsabilidades que no les corresponde, ya que esas clases solo se encargan del manejo de información, pero también se las esta haciendo responsable de buscar, eliminar, actualizar o agregar información en la base de datos. Por tanto, para cumplir con el principio de responsabilidad simple (SRP), debe crear clases adicionales para que contengan las operaciones que se deben realizar en la base de datos.

  • Clases para operaciones
  • Clase Cliente

image
image
image

  • Clase PagoOP

image
image

  • Clase MembresiaOP

image
image

  • Diagrama: Rediseño clase Cliente
    image

  • Diagrama: Rediseño clase Pagos
    image

  • Diagrama: Rediseño clase Membresia
    image

DIP (2) - SOLID

Solución clase Cliente:

Para cumplir con el principio DIP, se debería introducir una abstracción o una interfaz que represente la funcionalidad de acceso a la base de datos en lugar de depender directamente de la clase Conexion. Luego, se podría inyectar esta abstracción en la clase Cliente a través de la inyección de dependencias, lo que permitiría que la clase Cliente dependa de una abstracción en lugar de una implementación concreta de acceso a la base de datos.

Se adjunta un diagrama UML

clientClassSolution

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.