2007 年 1 月 20 日 23 時 54 分

動作チェック


このアーカイブは同期化されません。 mixi の日記が更新されても、このアーカイブには反映されません。


大分と構造が変わったので、
ここで一度、以前と同じように動作するかどうかテストしよう。

RFBSession クラスに詰め込んでいた処理を、
全て外部のクラスを利用するように書き換える。

========== RFBSession#execute ==========

    /**
     * RFB プロトコルの開始点。
     * @param in 汎用入力ストリーム。
     * @param out 汎用出力ストリーム。
     * @throws IOException 入出力エラー。
     */
    public void execute(InputStream in, OutputStream out) throws IOException {

        // 基本オブジェクトの用意
        RFBContext context = new RFBContext();
        RFBInputStream rin = new RFBInputStream(in);
        RFBOutputStream rout = new RFBOutputStream(out);

        // テスト用の値
        int serverVersion = 3007; // 3.7
        SecurityHandler securityHandler
                = new VNCAuthenticationHandler("password");

        // ProtocolVersion ハンドシェイク
        {
            ProtocolVersionHandshake handshake
                    = new ProtocolVersionHandshake(serverVersion);
            handshake.execute(context, rin, rout);
        }

        // Security ハンドシェイク
        {
            SecurityHandshake handshake = new SecurityHandshake(securityHandler);
            handshake.execute(context, rin, rout);           
        }

        // メイン処理
        processMain(context, rin, rout)

    }

========== end of RFBSession#execute ==========

テスト用の値を変更しながら実行してみたが、
特に問題なく同様の結果となることが確認された。

さて、RFBSession は以前と比べて、
クラス内がシンプルになり、非常に見通しが良くなった。

基本的に、メソッドの行数を短めに抑え、
意味のある単位でクラスに分けることは、
ソースコードの保守性を高める上でメリットが多い。

ただし、クラスやメソッドが増えると、
処理をトレースするのが困難となるというデメリットもある。

特に、インタフェースを基準としたクラス化を行うと、
インタフェースを実装したクラスの実行時型が分かりにくく、
ソースコードを目で追う(所謂机上デバッグ)のが難しい。

トレースは、手続き型プログラミングの時代からある手法で、
オブジェクト指向設計の考え方とは反する部分もある。
このあたりのバランスを考えるのは意外に難しい。



Copyright (c) 1994-2007 Project Loafer. All rights reserved.