Задать вопрос
@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);
 }     
}
  • Вопрос задан
  • 241 просмотр
Подписаться 2 Оценить Комментировать
Решения вопроса 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, потому что непросто читать ваш код.
Ответ написан
Ваш ответ на вопрос

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

Похожие вопросы