LoginSignup
0
0

More than 1 year has passed since last update.

Facadeパターンでの開発

Last updated at Posted at 2022-09-17

開発の初案件が終わったので、何回かに分けてアウトプットします。
今回はFacadeパターンでの実装の流れについてです。
以下のような前提で開発をしました。
ファイル名やクラス名は実際のものと変えています。

Facadeパターン

複数のクラスが集まってできたプログラムは、様々なクラスのメソッドを呼ぶので処理が複雑になります。
このような場合に処理を依頼する側から見た際に窓口となるファイルを用意するのがFacadeパターン。
Facadeに当たるファイルには実際の処理は書かず、メソッドの呼び出しをメインにします。
今回は携帯電話の支払い履歴を閲覧するような処理を実装しました。
処理としては電話番号とIDで顧客情報照会をした後、顧客情報に紐づく履歴情報を取得するという流れです。
中身の処理は今回は省略します。
WB0_01が窓口となるFacadeにあたり、顧客情報照会をするクラスがClient、履歴情報を取得するクラスがPaymentHistoryとします。スクリーンショット 2022-09-17 17.35.02.png

インターフェース

基本的にメソッドはインターフェースにしています。
インターフェースを定義するファイルと実際の中身の処理が書かれているファイルを用意しています。

定義ファイル 処理記述ファイル
Client.java ClientImpl.java
PaymentHistory.java PaymentHistoryImpl.java

Bean定義ファイル

インスタンスをxmlファイルに登録します。
他クラスのメソッドを使用する時は、ここで登録されているインスタンスを使用してメソッドを呼び出します。
Bean定義についてはこちらを参考にしました

bean-conf.xml
<bean id=WB0_01 class="com.Wb0controller.WB0_01">
    <property name="client"><ref bean="Client"></property>
    <property name="paymentHistory"><ref bean="PaymentHistory"></property>
</bean>

各フィールドへの値の挿入、フィールドの取得は処理を呼び出すファイルにsetter/getterメソッドを作成

WB0_01.java
public class WB0_01 {
    private Client client = null;
    private PaymentHistory paymentHistory = null;

    public setClient(Client client) {
        this.client = client;
    }

    public getClient() {
        return client;
    }

    public setPaymentHistory(PaymentHistory paymentHistory) {
        this.paymentHistory = paymentHistory;
    }

    public getPaymentHistorye() {
        return paymentHistory;
    }
}

処理の流れ

1. ユーザーの情報を取得

ユーザーが支払い履歴を閲覧しようと電話番号を入力して閲覧ボタンを押すと、MainクラスでWB0_01.javaのdoReferメソッドを呼び出す。
この時に上記で説明した各フィールドのsetterメソッドが動き値が入る。
そしてHttpServletRequestインターフェースで定義されているgetHeaderメソッドを呼び出すことによって、リクエストに含まれているユーザーの電話番号やIDを取得できる

WB0_01.java


public class WB0_01 {

    private Client client = null;
    private PaymentHistory paymentHistory = null;

    public setClient(Client client) {
        this.client = client;
    }

    public getClient() {
        return client;
    }

    public setPaymentHistory(PaymentHistory paymentHistory) {
        this.paymentHistory = paymentHistory;
    }

    public getPaymentHistorye() {
        return paymentHistory;
    }

    public int doRefer() {

        try {
            String number = this.getReq().getHeader("user-number");
            String id = this.getReq().getHeader("user-id");
        }catch(省略){
            //エラーを返す処理
        }
    }
}

2. 電話番号とIDを基に顧客情報照会を行う

上記で書いたとおり、メソッドはインターフェースを使用していて、定義ファイルと処理ファイルの2ファイルに分かれている

Clientクラスのインターフェースの定義ファイル

Client.java

public interface Client {
    String getClientInfo(String number, String id);
}

Clientクラスのインターフェースの処理ファイル

ClientImpl.java
public class ClientImpl implements Client {
    @Override
    public String getClientInfo(String number, String id) {
        //顧客情報を取得する処理
        //numberとidを基にSqlを実行したりなど
    }
}

呼び出し側
他クラスのメソッドを使用することになるので、bean-conf.xmlで定義をしたインスタンスを使ってメソッドを呼び出す。
Clientクラスのメソッドを呼び出すので、Clientクラスのインスタンスを使用する。
1.でsetterメソッドが動いているので、clientフィールドには値が入っている。
なのでgetterメソッド+メソッド名でClientクラスのメソッドを呼び出せる。

WB0_01.java

public class WB0_01 {
    private Client client = null;
    private PaymentHistory paymentHistory = null;
    //ここが動いたのでclientには値が入っている
    public setClient(Client client) {
        this.client = client;
    }
    //getClientを呼び出すことでclientを使用することができる
    public getClient() {
        return client;
    }

    public setPaymentHistory(PaymentHistory paymentHistory) {
        this.paymentHistory = paymentHistory;
    }

    public getPaymentHistorye() {
        return paymentHistory;
    }

    public int doRefer() {
        try {
            String number = this.getReq().getHeader("user-number");
            String id = this.getReq().getHeader("user-id");
            //顧客情報照会
            String customer = this.getClient.getClientInfo(String number, String id);
        }catch(省略){
            //エラーを返す処理
        }
    }
}

3.顧客情報を基に履歴情報を取得

処理の流れとしては顧客情報と変わりはありません

PaymentHistoryクラスのインターフェースの定義ファイル

PaymentHistory.java

public interface PaymentHistory {
    String getPaymentInfo(String customer);
}

PaymentHistoryクラスのインターフェースの処理ファイル

PaymentHistoryImpl.java
public class PaymentHistoryImpl implements PaymentHistory {
    @Override
    public String getPaymentInfo(String customer) {
        //履歴情報を取得する処理
        //顧客照会で取得した情報を基にSqlを実行したりなど
    }
}

呼び出し側
ここもClientと同じでgetterメソッド+メソッド名でPaymentHistoryクラスのメソッドを呼び出して処理をします

WB0_01.java
public class WB0_01 {
    private Client client = null;
    private PaymentHistory paymentHistory = null;

    public setClient(Client client) {
        this.client = client;
    }

    public getClient() {
        return client;
    }
    //ここが動いたのでpaymentHistoryには値が入っている
    public setPaymentHistory(PaymentHistory paymentHistory) {
        this.paymentHistory = paymentHistory;
    }
    //getPaymentHistoryeを呼び出すことでpaymentHistoryを使用することができる
    public getPaymentHistory() {
        return paymentHistory;
    }

    public int doRefer() {
        try {
            String history = this.getReq.getHeader("user-number");
            String id = this.getReq.getHeader("user-id");
            //顧客情報照会
            String customer = this.getClient.getClientInfo(String number, String id);
            //支払い情報取得
            String history = this.getPaymentHistorye.getPaymentInfo(String customer);
        }catch(省略){
            //エラーを返す処理
        }
    }
}

後は少し省略しますがcustomerとhistoryを返して支払い情報取得処理は終わりという流れになります

WB0_01.java
return this.createResponse(ReturnCde.OK_0,null,customer,history);

今回はFacadeパターンでの処理の流れを書きました。
中身の処理については何回かに分けて、また書いてみたいと思います!

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0