4

小説や本のオブジェクト指向表現を作成しています。オブジェクトを何にするか、別のオブジェクトの属性を何にするかという点で、設計パターンまたはアドバイスを探しています。

たとえば、小説の登場人物に興味があり、登場する章やページに興味があるとします。

私が苦労している概念は、同じインスタンスとの関係に参加する 2 種類の「コンテナー」を使用してオブジェクト システムを編成する方法です。これは、基になるデータの比喩的な「物理的」ビューと「論理的」ビューがある他のシステムで発生すると思います。

ここには、小説、章、ページ、キャラクターなど、さまざまなオブジェクトがあります。

これらの可能なオブジェクト間には、さまざまな関係があります。

  • 小説には一連の章、一連のページ、一連のキャラクターがあります
  • チャプターには一連のページと、0 個以上のキャラクターのコレクションがあります
  • ページは、1 つまたは複数の章、および 0 個以上の文字に関連付けられています
  • 文字は 1 つまたは複数のページと章に関連付けられています

これらのオブジェクトの目的は、次のような質問に答えることです。

  • アリスというキャラクターが登場するページは?
  • 第6章に登場するキャラクターは?
  • 同じページに頻繁に登場するキャラクターは?
  • ボブというキャラクターが初めて言及されたページは?

この種のデザインにアプローチする方法について、私は少し迷っています。いくつかのアプローチがあります。

  • すべて (小説、章、ページ、キャラクター) をオブジェクトにすると、これらの各オブジェクトには、含まれている/関連する他のオブジェクトへの参照のリストがあります。

  • 章またはページのどちらか一方を優先し、もう一方を最初の属性にします。たとえば、Novel、Chapter、Character オブジェクト リストだけを使用して、"pages" を Chapter オブジェクトの属性にすることができます。

  • 上記のアイデアをさらに進めて、小説とキャラクターに固執し、各キャラクターに「章で発生」や「ページで発生」などのいくつかの属性を与えることができます。

    OO 設計の達人が、オブジェクトまたは属性の間の線をどこで引くべきか、また、関心のあるオブジェクト (キャラクター) ) に属します。

4

1 に答える 1

0

ソフトウェアの目的は、特定のページに表示される文字など、書籍に関するさまざまな質問に回答することであると述べていることが重要です。

これは、次の 2 つのことを示しています。

  1. 本の特定の版の物理的なレイアウトをモデル化しようとしています (そうでなければ、上記の例の質問は意味をなさないため)。
  2. 回答が必要な質問の範囲によって、システムが次のことを行うかどうかが決まるため、設計は大きく影響を受けます。

    • データ構造を使用して、回答として必要なメタデータを事前にキャッシュします (たとえば、キャラクターが表示されるページのリストを明示的に保存します)。
    • 「生データ」を保存します (たとえば、小説 > 章 > ページ > テキストのツリーとして)。このデータは、特定の質問に答えるために処理されます。
    • 両方のいくつかの組み合わせ

あなたの場合、組み合わせが正しい可能性が高いと思われるため、「生データ」は、最初に言及したアプローチと同様の方法で表されます。

すべて (小説、章、ページ、キャラクター) をオブジェクトにすると、これらの各オブジェクトには、含まれている/関連する他のオブジェクトへの参照のリストがあります。"

ただし、 のインスタンスは のインスタンスをPage参照しTextCharacter代わりにメタデータ クラスになるのではありません。

メタデータは、事前にキャッシュするか、生データをトロールしてオンデマンドで生成することができます。

いずれにせよ、データモデルを正規化したいでしょう。

于 2013-05-31T04:06:10.993 に答える