2011-03-22 11 views
0

私は一連のオブジェクトを持ち、それぞれにメタデータが関連付けられています。典型的なケースでは、ObjectとMeta_Dataを表すクラスがあり、Meta_DataをObjectの属性にすることができます。クラスのコレクションを構成する方法

+---------------+ +---------------+ 
| Object  |--->| Meta_Data | 
+---------------+ +---------------+ 

この問題は、それぞれがMeta_Dataの特定のインスタンスに関連付けられているオブジェクトのコレクションを作成する場合に発生します。

META_DATAは独自の隣人にアクセスできるようにする必要があります:私はちょうど(属性としてMETA_DATAのインスタンスを持つ)オブジェクトのコレクションを作成する場合は、META_DATAインスタンスが単離される

a[0] = Object(); 
a[1] = Object(); 

// a[0].meta needs to be able to interact with a[1].meta 
a[0].meta = Meta_Data(); 
a[1].meta = Meta_Data(); 

をのみで対話することができますプライマリオブジェクトを通過します。これは理想的ではないようです。私は考えることができる

唯一の真の選択肢は私が持っていることを可能にするいくつかのコンテナクラスを作成することです:

含むオ​​ブジェクトインスタンスのコレクション
  • A Meta_DataStack属性が含まれてい
    1. アンObjectStack属性Meta_Dataインスタンスのコレクション
    2. 特定のObjectインスタンスの対応するメタデータをクエリできるように、2つを同期させる何らかの種類のインターフェイス。

    これはやはり効率が悪いようです。だから、アイテムごとにリンクできるオブジェクトのコレクションを持つ最良の方法は何ですか?あなたが持っている何

  • 答えて

    2

    は次のようなものです:

    [Object]--->[MetaData]<--+ 
           |  | 
           +--------+ 
    

    何かがメタデータ・オブジェクトを接続の担当である必要があり、それがいずれか1つの特定のObjectオブジェクトにすることはできません。すべてを適切にまとめるためのファクトリまたはビルダーが必要です。

    これは、Factoryが存在する両方のクラスのすべてのインスタンスへの参照を維持する必要があるわけではなく、接続を行うだけでよいことを意味します。

    Object a = new Object(); 
    Object b = new Object(); 
    MetaData ma = new MetaData(); 
    MetaData mb = new MetaData(); 
    
    ma.setFriend(mb); 
    a.setMetaData(ma); 
    b.setMetaData(mb); 
    
    関連する問題