5

私は2つのEclipseプロジェクトで使用しているモデルクラス(MVC pattern)を持っています。Eclipseプロジェクト間で共有されるクラスのパッケージプライベートフィールドへのアクセス

1つのプロジェクトは、それをProducerと呼びましょう。ストリームからデータをキャプチャしてデータベースに格納しています。問題のモデルクラス、たとえばObjectModelは、シリアライズしてdbに格納する前にストリームを非直列化して操作するために使用されます。

もう1つのプロジェクトは、Consumerとしましょう。データベースに保存されているデータを引き込み、画面上に表示しています。同じモデルクラスを使用して、格納されたデータをデシリアライズしてビジュアライゼーションアプリケーションで使用します。

私はObjectModelをEclipseプロジェクトに入れて、ProducerConsumerプロジェクトでソースを共有する予定でした。ただし、各アプリケーションには、パッケージ - プライベートアクセス修飾子を利用してObjectModelのフィールドを取得および設定する同じパッケージ内のクラスが現在存在します。

複数のEclipseプロジェクトにまたがってソースを共有し、共有ソースとのパッケージプライベートアクセスを維持する方法はありますか?

UPDATE:私はトラブル私は投稿する前にこれをしようとしなかった理由であるEclipseのプロジェクトで共有コードを、取得を抱えていました。最後にその部分を動かして、別の答えhereとして書きました。

+0

あなたはなぜ ''共有ソースとのパッケージプライベートアクセスを維持したいのですか? – Vikdor

+0

'Producer'には、複数の異なるストリームからのデータをカプセル化する' ObjectModel'インスタンスを生成する 'ObjectModelFactory'クラスがあります。 'Consumer'にはクラス「ObjectModelMerger」があり、これはライブ更新を非直列化「ObjectModel」にマージします。 'ObjectModelFactory'と' ObjectModelMerger'を除いてプログラムのどの部分にもsetterを必要としないので、これらのクラスのそれぞれがアクセッサを経由するよりも、ObjectModelフィールドに直接アクセスするほうがはるかに良いです。 'ObjectModel'フィールドの設定へのアクセス。 – ericsoco

答えて

1

プロデューサとコンシューマプロジェクトのクラスがObjectModelと同じパッケージで宣言されている限り、それはまったく機能するはずです。

ただし、デザインを再考して、ObjectModelでパブリックアクセサメソッド(ゲッタとセッタ)を提供することができます。上記@GreyBeardedGeek答えに

+0

上記の私のコメントを参照してください:デザイン。 – ericsoco

1

ルック:

限りプロデューサーおよびコンシューマー・プロジェクトのクラスとObjectModelと同じパッケージで宣言されているが、それはすべてだけで動作するはずです。

あなたはJavaでC++の友人を探しています。一般に、と間違ったデザインの症状があります。あなたのデザインが大丈夫ならば、 "パッケージプライベートアクセス"を使うことは、友人を実装するためのJavaの標準的な方法です。あなたのクラスが異なるプロジェクトにある場合、技術的にはうまくいくでしょう...あなたのデザインが大丈夫だと思うなら、おそらく* Heperクラスの使用を検討したいと思います。たとえば:

public class SomeClass { 
void foo(){... 
} 
} 

public class SomeClassHelper { 
private SomeClass someClass; 
public SomeClassHelper(SomeClass someClass){ 
    //you can do it better this with some DI Framework, 
    //for illustration purpose 
    this.someClass=someClass; 
} 

public SomeClassHelper(){ 
    //for illustration purpose only 
    this.someClass=new SomeClass(); 
} 

**public** void foo(){ 
    //this is punch line 
    someClass.foo(); 
    } 

}

あなたは工assと同じパッケージでSomeClassHelperを置く必要がありますが、SomeClassHelperは異なるソースフォルダまたはプロジェクトにすることができます。

+0

友人のパターンを見たことがなかった、イラストのおかげで。機能のサブセットを公開するのに有益なようですが、この場合は 'ObjectModel'のすべてのフィールドへの書き込みアクセスを希望します。これは' ObjectModel'内のアクセサに直接似ています。 。 – ericsoco

関連する問題