• 締切済み

インターフェースの実装で実体が存在しない場合の対処について

現在作成している部品群のパッケージを新しいパッケージに変更しなければならない ということに取り組んでいます。従来動作していた開発システムを変更することなく、 新しく開発したシステムも動作させたいと思っています。 色々考えてみたのですが行き詰まってしまい、是非お知恵をお貸し願いたいです。 長文ですが、宜しくお願い致します。 -------------------- (1)過去のパッケージのインターフェース   package hoge.hogehoge;   public interface Hoge {     public String getHoge();   } -------------------- (2)新しいパッケージのインターフェース   package new.hoge.hogehoge;   public interface Hoge {     public String getHoge();   } -------------------- (3)(2)に対する新しいパッケージのラッパー   package new.hoge.hogehoge;   public class HogeWrapper implements hoge.hogehoge.Hoge, new.hoge.hogehoge.Hoge {     private String Hoge;     public String getHoge() {       return Hoge;     }     public void setHoge( String data ) {       Hoge = data;     }   } -------------------- 上記はシステム上、(2)と(3)を利用して以下の様な形で 利用しており、Servletのセッションオブジェクトとして保管しています。  HOGE = new HogeWrapper();  HttpSession#setAttribute( HOGE, "HOGE" ); 現在まで複数のシステムは(1)を利用していたのですが、 パッケージ名を変更しなければならない、且つ旧システムでは パッケージ名を変更する事無く利用出来る様にするということで、 (2)を新しく作成、新しいパッケージ名にして(1)と(2)を 実装する様に変更しています。 この構成にしている理由が以下の通りです。  ・今まで作成した古いパッケージを利用したシステムでも   これらの情報に置き換えてきちんと動作させたい。  ・Servletでセッションオブジェクトとして保存されており、   新しいパッケージでも古いパッケージでも同じセッション   オブジェクトを扱う必要がある。    例1)旧システム     <import文>       import hoge.hogehoge;     <利用文>       Hoge HOGE = ( Hoge ) HttpSession#getAttribute( "HOGE" );    例2)新システム     <import文>       import new.hoge.hogehoge;     <利用文>       Hoge HOGE = ( Hoge ) HttpSession#getAttribute( "HOGE" );  ・二重にラッパーを持つと、メンテが発生した際に両方を   行わなければならず、メンテ漏れを発生させたくない。  ・二重に持っても新パッケージのシステムでは旧パッケージを   利用する旨の記載を残せないのが基本のため、動作しない。 上記のままだと、一応はきちんと動作しますが、ここで問題があります。 (1)は古いパッケージということもあり、システムによって 存在したり存在しなかったりする可能性があります。 この場合(3)の実装で存在しないインターフェースを記述して いることがあるためにエラーが発生すると思います。 何か上手く回避する方法や新たな案はないでしょうか? 宜しくお願い致します。

みんなの回答

  • _ranco_
  • ベストアンサー率58% (126/214)
回答No.1

> 存在しなかったりする可能性 存在しなくても正常に動いていたわけ? 存在しているやつとまったく変わらず?

everfor
質問者

補足

回答ありがとうございます。 ご指摘の件についてですが、説明不足で申し訳ないです。 今後の新たなパッケージでシステムを開発する場合には、旧のパッケージは不要となるため、 出来れば旧のパッケージのファイル郡を入れたくないという思いがあります。 やはり無理な話でしょうかね…。

関連するQ&A