連載 :
EJB 3を再考するステートレスセッションBeanでの実装
2007年10月12日(金)
銀行の入出金処理
ここでは銀行処理をシンプルに考えます。利用者は口座を作成し、口座に対して入金処理と出金処理を行います。この銀行処理のイメージを図2に示します。
OOAD(Object-Oriented Analysis&Design:オブジェクト指向分析/設計)を実施し、最終的に設計クラスができあがります。図3にクラス図を示します。
クラス | 用途 |
---|---|
BankControl | 銀行処理インタフェース |
BankControlBean | 銀行処理実装クラス |
Account | 口座クラス |
このクラスをそのまま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での実装です。
Think ITメルマガ会員登録受付中
Think ITでは、技術情報が詰まったメールマガジン「Think IT Weekly」の配信サービスを提供しています。メルマガ会員登録を済ませれば、メルマガだけでなく、さまざまな限定特典を入手できるようになります。