2009-08-24 10 views
0

注:WinForms C#アーリーラーニングレベル!デザイン:親を避けながら子コレクションにアクセス!

私はC#オブジェクト環境で状況を実装する最善の方法をいくつか援助したいと思います。私はまだ存在しないのでコードを投稿することはできませんが、私はあなたに代替実生活比較を与えることができます。

私はBookクラスを持っています。私はこれらのブッククラスのコレクション(<List>)を持っています。 各Bookクラスには、Chapterクラスのコレクション(<List>)があります。本のClassとChapterクラスは完全に異なる抽象クラスに基づいています。これらは別のビジネスレイヤーで定義され、データソースレイヤーからデータがロードされます。多くの本と多くの章があることに留意してください。

私のGUIレイヤーから、ブックを取得することができ、それはコレクションインデックス/キーに基づく基本的な属性です。 Bookクラスを使って、本の中のすべての章を入手することもできます。

私がする必要があるのは、Bookクラスを経由せずに、どのBookからでもChapterクラスを取得できることです。 これを行うには、どのような方法が最適ですか?

ありがとうございました。おばあちゃんとギャル

答えて

2

「取得」とはどういう意味ですか?あなたはすべての章を記憶していると思いますか?あるいはデータベースを検索していますか?

チャプターを特定する情報はありますか?

チャプターの全部(またはチャプターの全文ではない場合はチャプターディスクリプタ)がメモリー内にあるとします。 ChapterIdentity(おそらくBookId + ChapterNumber)によってキーが付けられた章のコレクションがあります。

だから、それはちょうど

ChapterCollection.getById(aChapterId); 

あなたが本を追加するときは、コレクションにそのすべての章を追加する必要があります。

これはおそらくデータベースからのものです。だからあなたはidでチャプターを検索する機能が必要です。それはすべてあなたが永続性をどのようにしているかにかかっていますが、概念的にはリトリーバーの観点からはメモリ内の例のように見えます。

+0

'get'は、メモリからチャプターへの参照を検索して取得することを意味します。このチャプターは、データベースにすべての詳細を照会するために使用できます。 チャプターにはタイトルとともに固有のIDが付いています。 私は書籍と章の別々のコレクションを保管しておき、書籍の章の階層関係を持つのではなく、それらをリンクすることを提案していますか? –

+0

階層関係と「すべてのチャプター」コレクションの両方を持つことができます。あなたのオブジェクトモデルを通して複数のアクセスパスを持つことはかなり合理的です。しかし、私は実際には、全体の章を覚えておくのが妥当であるとは思っていません - 議会のLibrarayのためにはうまくいかないでしょうか? getById()を提供しているサービスAPIがwhetehrを隠す可能性があります。必要に応じてデータベースを取得します。 – djna

1

なぜあなたは本のクラスを通過したくないのですか?実際には、ブッククラスオブジェクトのリストを検索するか、すべての書籍のすべての章を含むセカンダリコレクションオブジェクトを維持するという2つのオプションしかありません。 チャプター・クラスの属性で検索する特定のキーがあると仮定していますか?もしそうなら、辞書(キー、チャプター)を使用して検索を高速化するか、またはリスト(章の)を保持し、LINQを使用してそれを検索することができます。 あなたが探しているものと、その本のクラスを避ける理由によって異なります。

+0

2番目のコレクションオプションは、私が思いつくことができる唯一のものでした、そして、それを行うより良い方法があるように思えました。 –

0

ブッククラスを使用していない場合は、すべてのチャプターオブジェクトへの参照を含む「ライブラリ」コレクションが必要です。

関連する問題