GithubHelp home page GithubHelp logo

atm-machine's People

Contributors

danh957 avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

atm-machine's Issues

Posible implementación patrón Singleton

Hola, revisando el repositorio me di cuenta que la clase BankDataBase cuenta con un constructor público, lo cual puede ser un poco peligroso, ya que en teoría solo debe existir una única base de datos para el desarrollo del proyecto. Es por esto, que he planteado una solución usando el patrón Singleton, para asegurarse que la instancia de esta clase sea única.

Debemos crear un método getInstance, para que devuelva la instancia que ya se ha creado, o crearla si aún no existe, además establecer el constructor privado para que no se tenga acceso a él, fuera de esta clase.

Comparto diagrama de clases:
image

Así, en cualquier momento que se necesite se puede hacer referencia a esta única base de datos, solucionando el posible problema de tener bases de datos repetidas.

Saludos

Posible refactorización Substitute algorithm

Hola, revisando el repositorio en la clase CashDispenser, el método dispenseCash, realiza ciertas operaciones para la entrega de dinero.

image

Considero que el método debe solo realizarse si el ATM cuenta con la cantidad necesaria, es por esto que he refactorizado el código aplicando Substitute Algorithm quedando así:

image

Posible refactorización Inline Temp

Hola, estuve revisando el repositorio y me fijé que en la clase CashDispenser.java, el método isSufficientCashAvailable tiene una lógica sencilla pero toma muchos pasos para realizar, hasta la aplicación del If es redundante:

image

Es por esto que he pensado en una manera de refactorizarlo, aplicando inline temp para que el código disminuya pero sea igual de entendible. Así:

image

Recomendación de implementación patrón de diseño Chain of Responsibility

Hola, estuve explorando tu repositorio y en la clase Withdrawal tienes un método transaction() el cual realiza algunas validaciones para poder verificar la transacción realizada. Mi recomendación aqui en este método en lugar de tener muchos condicionales se cree tantas clases como procesos de verificación se tienen para de esta manera en el método transaction() solo llame a un método execute() el cual va por cada clase de proceso de verificación para validar la transacción y si en algun momento no se valida retorna algo dependiendo de la clase que se encuentra y saber con exactitud donde no se valida la transaccion. A esto se lo conoce como patrón de diseño Chain of Responsibility y esto a su vez te permitira cumplir el principio SOLID de Single Responsibility Adjunto un diagrama de clases para que mi recomendación sea más entendible
image

Withdrawal else issue

On line 69, for the else statement, my IDE is giving me a syntax error and to delete this statement.

Posible implementación patrón Strategy

Hola, dentro del repositorio en la clase ATM.java, he podido apreciar que según el botón del keypad se crea una transacción diferente, y en cierto caso (3) se realiza otra función, screen.setSize

Entiendo que el objetivo es crear una transacción dependiendo lo que escoja el usuario en tiempo de ejecución, por lo que se puede aplicar el patrón Strategy para englobar todo lo que se desea realizar (crear transacción y operaciones)

Se lo puede hacer de la siguiente manera:
Dentro de la clase ATM, crear un atributo context que almacenará el objeto de tipo Strategy, y cada estrategia concreta detallará los pasos a realizar en caso de seguir ese camino.

Comparto diagrama de clases:
image

Saludos

Fixed your program (in part)

I fixed most of your program. Haven't been through the program thoroughly, and am not sure how the PIN is generated to test the ATM program, but if you could share it would be most appreciated.

Encountered invalid access modifiers, faulty constructors, missing methods

First, thank you for such great code. A few points:

Lines 15 and 16 in Account.java are undefined:

            setPIN(thePIN);
            setAvailableBalance(theAvailableBalance);

Consequently lines 42 and 74 throw errors.

Moreover, lines 30, 92, and 93 throw errors because of undefined methods in BankDatabase.java.

And, per issue #1 , deposit slot is missing. Do you have refactored code available? Otherwise, this is wonderful, but the errors may cause confusion for folks using this app and associated code for the first time.

Thank you for constructing this project, which has been really useful for me and my mentees/students.

Cheers


Milo

DepositSlot

There is an error in your code since DepositSlot class is missing.
If there is any such mistake or file missing then update your repo with error free.

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.