ObjectSquare [2003 年 3 月号]

[技術講座]ラッピングに関する一考察


1. オリジナル API の説明

1.1. 概要

 このドキュメントでは仮想的なライブラリとフレームワークを例に話を進めていきたいと思います。ここで、ライブラリとは、Log4J のように、プロダクトが提供したサービスをアプリケーション側から呼び出す形式を、フレームワークとは、Struts のように、プロダクトで予め用意されたインタフェースを、アプリケーション側で実装し、その制御はプロダクト側で行う形式をいうことにします。

1.2. ライブラリのサンプル

 では、ライブラリのサンプル Service の API を説明します。

Original(Library)

 アプリケーションは Service のインスタンスを static メソッド getInstance() で取得します(インスタンスを毎回生成するか、キャッシュするかはここでは特定しません)。その他の API ですが、service() は独自に定義された引数 Param と戻り値 Result、例外 AppException の各クラスを使用します。service2() は引数は独自に定義されたクラスですが、戻り値は Java 標準ライブラリの Object 型、service3() は戻り値は独自に定義されたクラスですが、引数は Java 標準ライブラリの型、service4() は引数、戻り値とも Java 標準ライブラリの一般的な型となっています。

Service.java
package original;

public class Service
{
    protected Service() {}

    public static Service getInstance() {
        // 実装略。
    }

    // 独自の引数、戻り値、例外を使用。
    public Result service(Param param) throws AppException {
        // 実装略。
    }

    // 独自の引数を使用。戻り値は一般的な型。
    public Object service2(Param param) {
        // 実装略。
    }

    // 独自の戻り値を使用。引数は一般的な型。
    public Result service3(Object param, String name) {
        // 実装略。
    }

    // 引数、戻り値は一般的な型。
    public Object service4(Object param, String name) {
        // 実装略。
    }
}

1.3. フレームワークのサンプル

 続いて、フレームワークのサンプル Processor のAPI を説明します。

Original(Framework)

 アプリケーションは Processor インタフェースを implements したクラスを定義し、各メソッドを実装します(間に抽象クラス AbstractProcessor が入る場合もあります)。Processor を呼び出すのはフレームワーク側の責任です。用意された API は Service のときと同じように、独自に定義された引数 Param、戻り値 Result、例外 AppException の各クラスを使用する process()、引数のみ独自に定義されたクラスを使用する process2()、戻り値のみ独自に定義されたクラスを使用する process3()、引数、戻り値とも Java 標準ライブラリの型を使用する process4() の4つです。

Processor.java
package original;

public interface Processor
{
    // 独自の引数、戻り値、例外を使用。
    public Result process(Param param) throws AppException;

    // 独自の引数を使用。戻り値は一般的な型。
    public Object process2(Param param);

    // 独自の戻り値を使用。引数は一般的な型。
    public Result process3(Object param);

    // 引数、戻り値は一般的な型。
    public Object process4(Object param);
}
AbstractProcessor.java
package original;

public abstract class AbstractProcessor implements Processor
{
    protected AbstractProcessor() {}

    // デフォルトの実装(あれば)。
    public Result process(Param param) throws AppException {
        // デフォルトの実装。
    }
}
ProcessorImpl.java
package original.impl;

import original.*;

public class ProcessorImpl extends AbstractProcessor
{
    public ProcessorImpl() {}

    // 独自の引数、戻り値、例外を使用。
    public Result process(Param param) throws AppException {
        // 実装略。
    }

    // 独自の引数を使用。戻り値は一般的な型。
    public Object process2(Param param) {
        // 実装略。
    }

    // 独自の戻り値を使用。引数は一般的な型。
    public Result process3(Object param) {
        // 実装略。
    }

    // 引数、戻り値は一般的な型。
    public Object process4(Object param) {
        // 実装略。
    }
}

© 2003 OGIS-RI Co., Ltd.
Index Next
Index Next