2011-07-03 4 views
0

AmazonやIMDBなどのさまざまなソースから情報を引き出して、私が持っている映画/音楽/本の情報を保存するアプリケーションを作成することで、オブジェクト指向設計/データベース設計をしています。 ...ムービー、ブック、アルバムなどのプロダクトオブジェクトは、1つ以上のソースからの属性で構成され、オブジェクトの異なるタイプ間で重なり合っています(例:すべての製品にタイトル、ASINがあります)。さらに、さまざまなソースには同じ情報(リリース日など)といくつかの異なる情報が含まれている可能性があります(IMDBには、Amazonからこの情報を引き出すのではなく、使用したいキャストメンバーに関する詳細情報が含まれています)。私は、これらの重複する属性をどのソースから取得するかを選択できるようにしたいと考えています。簡単な例のためにリンクされた画像を参照してください:OODメディアルックアップアプリケーション

http://imageshack.us/photo/my-images/194/drawing1r.png/

私は他を作成し続ければそれもmoreso私はMovieクラスにパーサクラスで定義されたすべての属性を再定義することは少し冗長であるように思える、とブック、アルバム(ASIN、IMDBIdなどを再定義する)などのクラス。それはちょうど私がこの間違って近づいているようです。

拡張性と保守性に優れたより優れたデザインの提案はありますか?

答えて

0

ムービー、ブック、アルバム間の共通プロパティを保持する 'Product'というスーパークラスを作成できます。次に、これらの特定のオブジェクト型のそれぞれは、共通の親クラスから継承します。

AmazonおよびIMDBパーサーは、 Productオブジェクトを作成しないでください。なぜ彼らは製品の特性を保持していますか?個々の製品を個別に解析する場合は、各製品がそれ自身を解析し、それぞれの特定の製品クラス(または親)にコードを含めることができます。各オブジェクトは実際に特定の機能を持つか、特定のオブジェクトを表す必要がありますか?パーサーはオブジェクトを表しますか、または関数を実行しますか?オブジェクトを作成しますか?

Sourceの各タイプ、またはInterface(IProductSource)に共通の親クラスを作成してから、実際のデータソースがインターフェイスの背後にあるかどうかを特定のオブジェクトが認識しているか気にすることなく、そのインターフェイスのメソッドを呼び出すこともできます。

+0

IMDB/Amazonの解析では、Productが単一のソースからの情報のみで構成されていないため、Productオブジェクトを作成しません。私が分析クラスの属性を保持するのは、 "Product"クラスの特定の属性に使用するデータソースを選択できるようにするためです。 IProductSourceインターフェイスを作成するのは難しいです。各ソースが異なる属性を取得している可能性があるからです。 – user623879

関連する問題