2012-02-23 9 views
0

階層構造を設計する最善の方法を見つけようとしています。一例はスポーツリーグ構造であろう。階層設計にアドバイスが必要

ホッケーリーグは、2つの会議AとB

を持って会議Aは東、西

会議Bは部門北、南、東、西を持っている部門を持っています。

チームは部門別または会議で表示できます。

実際にはリーグは1つしかなく、複数の部門を持つ複数の会議を持つことができます。それぞれのサイズはさまざまです。主な関心事は、私が照会する必要がある時です。たとえば、構造をレイアウトするうえで、チーム内のすべてのチーム、会議のすべてのチーム、別のチームの部門や会議のすべてのチームを過度に扱いにくくすることなくフェッチすることができます。

ご協力いただきまして誠にありがとうございます。 :)

答えて

0

実際には2つのアプローチがあります。一つは、あなたが実際に階層を持っている「純粋」なデザインです。

League hasA collection of Conferences 
Conference hasA collection of Divisions 
Division has a collection of Teams 

あなたのリーグは、部門、会議またはすべてによって、チームの集合を与える方法を必要とします。あなたが何をする必要があるかに応じて、おそらくリーグにはコレクションではなくイテレータを提供するだけです。

第2のアプローチは、平坦以上databaseyです:

League hasA collection of Teams 
Team hasA Conference 
Team hasA Division 

このアプローチで(簡単に部門との会議に基づいてチームやフィルタを操作することができますが、部門や会議へのものを行うために困難です

すべてのチームが、どの部門に存在しているかを知るためには、すべてのチームを通過する必要があります。私の主な質問は:

  • データとは何ですか?
    • 会議や部門について報告する必要はありますか?
    • 階層構造で出力する必要がありますか?
  • 入力データは簡単に作成できますか?
    • 入力がフラットDBテーブルの場合は、それをフラットに保存するのは簡単です。

私はhierarhyのアプローチを使用しないように十分な理由を考えることはできません。

0

あなたはどの言語を使用しているのかわかりませんが、多態性とクラスを使用できると仮定すると、Composite Patternのようなデザインパターンを使用すると言います。

会議クラスとして「コンポジット」を、デビジョンクラスとして「葉」を設計します。

考えられるのは、カンファレンスクラスでディビジョンを子リストに追加してから、関数を呼び出して、それらの子に対して必要な操作を実行できるようにすることです。各会議は子供としても他の会議を開催することができ、したがって、別々の会議とその会議の間のコミュニケーションが可能になります。

すべてのコード方法と実行する必要のある操作によって異なります。

関連する問題