- 締切済み
インターフェースの実装で実体が存在しない場合の対処について
現在作成している部品群のパッケージを新しいパッケージに変更しなければならない ということに取り組んでいます。従来動作していた開発システムを変更することなく、 新しく開発したシステムも動作させたいと思っています。 色々考えてみたのですが行き詰まってしまい、是非お知恵をお貸し願いたいです。 長文ですが、宜しくお願い致します。 -------------------- (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)の実装で存在しないインターフェースを記述して いることがあるためにエラーが発生すると思います。 何か上手く回避する方法や新たな案はないでしょうか? 宜しくお願い致します。
- みんなの回答 (1)
- 専門家の回答
みんなの回答
- _ranco_
- ベストアンサー率58% (126/214)
> 存在しなかったりする可能性 存在しなくても正常に動いていたわけ? 存在しているやつとまったく変わらず?
補足
回答ありがとうございます。 ご指摘の件についてですが、説明不足で申し訳ないです。 今後の新たなパッケージでシステムを開発する場合には、旧のパッケージは不要となるため、 出来れば旧のパッケージのファイル郡を入れたくないという思いがあります。 やはり無理な話でしょうかね…。