銀行の入出金処理

銀行の入出金処理

ここでは銀行処理をシンプルに考えます。利用者は口座を作成し、口座に対して入金処理と出金処理を行います。この銀行処理のイメージを図2に示します。


銀行処理のイメージ
図2:銀行処理のイメージ

OOAD(Object-Oriented Analysis&Design:オブジェクト指向分析/設計)を実施し、最終的に設計クラスができあがります。図3にクラス図を示します。



銀行処理クラス図
図3:銀行処理クラス図
(画像をクリックすると別ウィンドウに拡大図を表示します)

クラス用途
BankControl銀行処理インタフェース
BankControlBean銀行処理実装クラス
Account口座クラス
表2:銀行処理クラスの用途

このクラスをそのままPOJOで記述してください。UMLツールからスケルトンコードを生成してもかまいません。実はこれでEJBの実装の半分は完成しています。Javaプログラム設計のベストプラクティスであるインタフェースベースのクラス設計を適用し、インタフェース「BankControl」を定義して、それに対する実装クラスを作成します。

インターフェース BankControl.java

public interface BankControl {

   public Account deposit(Account account, int amount);
   public Account withdraw(Account account, int amount);

}

次に入金(1)と出金(2)の2つのビジネスメソッドをもつコントロールクラスBankControlBeanをPOJOで実装します。

実装クラスBankControlBean.java

public class BankControlBean implements BankControl {

   public BankControlBean() {
   }

   public Account deposit(Account account, int amount) {        ←(1)
      account.setBalance(account.getBalance() + amount);
      return account;
   }

   public Account withdraw(Account account, int amount) {       ←(2)
      account.setBalance(account.getBalance() - amount);
      return account;
   }

}

口座であるAccountは一般的にいわれるJavaBeansです。これは通常のJavaのクラスで、3つの属性(1)を持ちそれぞれの属性に対して設定と取得のメソッド(2)を持ちます。

口座クラス Account.java

import java.io.Serializable;

public class Account implements Serializable {

   private int id;      ←(1)
   private int balance; ←(1)
   private String name; ←(1)

   public Account(int id, int balance, String name) {
      this.id = id;
      this.balance = balance;
      this.name = name;
   }

   public int getBalance() {             ←(2)
      return balance;
   }
   public void setBalance(int balance) { ←(2)
      this.balance = balance;
   }

   public int getId() {                  ←(2)
      return id;
   }
   public void setId(int id) {           ←(2)
      this.id = id;
   }

   public String getName() {             ←(2)
   return name;
   }
   public void setName(String name) {    ←(2)
   this.name = name;
   }
}

最後に、このビジネスロジックを利用するクライアントコードは以下のようになります。

EJBクライアント BankClient.java

public class BankClient {

public static void main(String[] args) {

BankControl bankControl = new BankControl ();

Account accountA = new Account(1000, 0, "ttazawa");
Account accountB = new Account(2000, 100000, "eyazawa");

accountA = bankControl.deposit(accountA, 15000);

System.out.println(accountA.getName() +":"+ accountA.getBalance());
System.out.println(accountB.getName() +":"+ accountB.getBalance());

accountA = bankControl.withdraw(accountA, 10000);
accountB = bankControl.deposit(accountB, 10000);

System.out.println(accountA.getName() +":"+ accountA.getBalance());
System.out.println(accountB.getName() +":"+ accountB.getBalance());

  }

以上がPOJOでの実装です。

人気記事トップ10

人気記事ランキングをもっと見る

企画広告も役立つ情報バッチリ! Sponsored

ClickHouse Cloudが実現した広告運用SaaS「ATOM」のデータ基盤革新、パフォーマンスを向上しながら、運用負荷とコストを削減 6:20 AIで開発が加速する時代、品質保証はどう変わる? Tricentisが示すAIエージェント活用の実像 11月9日 6:45 悪用までの猶予が「1分」に迫るフロンティアAI時代に開発と本番を貫く脆弱性管理が必要 10月29日 8:30 欧州CRA対応とSBOM運用。AI生成コードのOSS混入問題の対策とは ――スニペット単位で検出する「FossID」「Insignary Clarity」によるSBOM運用 9月16日 6:40 PostgreSQLからTiDBへ、稼働中SaaSで進める段階的DB移行の実践と再設計への展望 9月7日 6:30 機能安全開発におけるGoogleTestの活用を支援!「Parasoft C/C++test CT」で実現する効率化&AI連携 4月14日 6:30 【CNDW2025】Grafanaが明かす「オブザーバビリティの哲学」ー最小限の労力で実用的なインサイトを得るには 1月23日 6:30 【CNDW2025】プロダクト急増に備える基盤刷新 ーウェルスナビがECSからEKSへの移行で得た知見とは 1月15日 6:30 【CNDW2025】250環境を5人で運用、構築時間は30分に ーKINTOテクノロジーズが語るインフラ基盤組織の作り方 2025年12月18日 6:30 新たな自動化で熱視線! AIエージェントの「推論能力」を支える2つのコンポーネントとは? 2025年11月28日 6:30