@Romzasin
Студент, программист-новичок

Что сделать, что бы не нарушался принцип инверсии зависимостей?

У меня тут прога на java, суть которой совершать транзакцию между двумя банковскими аккаунтами. Все работает, но нарушен принцип инверсии зависимостей. Как это исправить?

class BankAccount
{
 private String AccountNumber;

 private double Balance;
 public BankAccount(String AccountNumber, double Balance) {
 this.AccountNumber = AccountNumber;
 this.Balance = Balance;
 }
 public void AddFunds(double value)
 {
 Balance += value;
 }
 public void RemoveFunds(double value)
 {
 Balance -= value;
 }
 @Override
 public String toString() {
 return "BankAccount{ " + "AccountNumber=" + AccountNumber + ", Balance=" + Balance + " }";
 }
}

class TransferManager
{
 public TransferManager(BankAccount Source, BankAccount Destination, double Value) {
 this.Source = Source;
 this.Destination = Destination;
 this.Value = Value;
 }

 private BankAccount Source;
 private BankAccount Destination;

 private double Value;
 public void Transfer()
 {
 Source.RemoveFunds(Value);
 Destination.AddFunds(Value);
 }
}

public class Bank {
    public static void main(String[] args){

    BankAccount from = new BankAccount("4321", 1200);
    BankAccount to = new BankAccount("1234", 200);
    System.out.println(from);
    System.out.println(to);
    TransferManager mymgr = new TransferManager(from,to,300);
    mymgr.Transfer();
    System.out.println(from);
    System.out.println(to);
 }     
}
  • Вопрос задан
  • 240 просмотров
Решения вопроса 1
pi314
@pi314
Президент Солнечной системы и окрестностей
Примерно так:
interface IBankAccount
{
 public void AddFunds(double value);
 public void RemoveFunds(double value);
}
...
class BankAccount implements IBankAccount
...
class TransferManager
{
 public TransferManager(IBankAccount Source, IBankAccount Destination, double Value) {
...

...и т.д. Везде заменить прямую зависимость от класса на зависимость от интерфейса, ибо:

- Модули верхних уровней не должны зависеть от модулей нижних уровней. Оба типа модулей должны зависеть от абстракций.
- Абстракции не должны зависеть от деталей. Детали должны зависеть от абстракций.

(Класс - это модуль, а интерфейс - это абстракция.)
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
@sirs
Вы наверное не совсем верно понимаете, что такое принцип инверси зависимостей.
Вы нигде не используете интерфейсы, у вас все жестко зашито, например TransferManager умеет работать только с одним единственным типом объектов BankAccount ....

P.S. Почитайте про code convention, потому что непросто читать ваш код.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы
Bell Integrator Ульяновск
До 400 000 ₽
Bell Integrator Хабаровск
До 400 000 ₽
Bell Integrator Ижевск
До 400 000 ₽
19 апр. 2024, в 23:00
5000 руб./за проект
19 апр. 2024, в 20:43
20000 руб./за проект