2012-02-09 19 views
-2

クラス間の関係モデルを改善できるかどうかを知りたい。私はMongoDBをデータベース層として使用しています。クラス間の関係を効率的に設計する

public class TodoItem { 
private String description; 
private Person person; 
} 

public class Person { 
private List<TodoItem> items; 
} 

私の質問は、一対多や双方向のような関係が関与するクラスの設計に固有です。ありがとう。

+0

従業員が1つの部門に所属するのはいつも真実ですか?多くの企業ではそうではありません。 – JonH

+0

部署の階層はどうですか? –

+0

コンテキストに関する詳細情報を提供する必要があります –

答えて

3

だろう。

双方向の依存関係があります。彼らはいくつかのトラブルを維持するが、これを使用してクライアントのためにいいです。もっと重要なのは何ですか?あなたは本当に両方の方法を多かれ少なかれ同じようにナビゲートする必要がありますか?

フルオブジェクトを保存します。プロキシを代わりに格納するか、またはIDとリポジトリを格納する必要があります。私たちがあなたの必要条件を、機能的にも非機能的にも知っているまで、誰も理解できません。

実際に要件がない場合は、要件を満たすのに役立たない場合はクラスを作成しないでください。設計が間違っています。

ソフトウェアの設計には絶対的な正誤がありません。このような決定が可能ならば、手動で行う必要はありません。現代のあらゆる言語で言語機能として利用できるようになります。設計とは、要件を理解し、その設計要件がその要件の達成度に与える影響を理解することです。

ですから、デザインは次のことを試して学びたい場合:

は、単純な機能要件を取り、非機能要件を変更するとどのようにあなたのデザインの変更を考える:それはチップカード上で実行する必要があります。毎秒何千もの要求を処理する必要があります。たくさんの書き込み、いくつかの読み込み。多くの読み込み、いくつかの書き込み。 ...

1

本当に双方向の関連付けが必要ですか?例えば、Departmentはそれが所属する会社を知る必要がありますか?

単方向の関連付けでは、DepartmentCompanyについて何も知る必要はありません(またはCompanyが変更された場合は変更されます)。同じことはProjectEmployee、...

私が見ている以上の情報はありません。

+0

私のコードを更新し、上記のコメントを残しました。 – jsf

+0

あなたはあなたの質問を完全に変更しました。私の答えは何も意味しません。別の質問をする場合は、別の質問を作成する必要があります(ここにリンクしてください)。 –

+0

さて、私の質問はデザインに特有のものだと言いました。私はそれを双方向の関連に絞り込むように修正しました。だから、最初の文章 "あなたは本当に..."を打つようになっています。どうやってタイトなカップリングなしでシンプルなデザインを作ることができますか? IDのみを含める?再び、私は最初はあまりにも漠然としていたことを申し訳なく思っています。将来のために覚えています。 – jsf

0

簡単な答えはそれが本当にあなたの要件/環境に依存

public class Company { 
private List<Department> departments; 
} 

public class Department { 
    private List<Employee> employees; 
    private List<Project> projects; 
    private Map<Employee, Project> employeeProject; 
} 

public class Employee { 
    private String name; 
} 
+1

プロジェクトには複数の部門の人が含まれる場合があります。 IMOはこの作業を単純化してはいけません。 –

+0

私はAlexと一緒にこのプロジェクトを行っていますが、ユーザーがプロジェクトをたくさん持っていることを除いて、プロジェクトが従業員や部署にどのように関係しているか分かりません。これは元のデザインと互換性がないかもしれません。 –

+0

私は1つの質問に焦点を当てるようにコードを単純化しました。つまり、PersonがアイテムのIDを格納する必要があるか、完全なTodoItemのリストを維持する必要があるかどうかです。これは双方向の関係です。申し訳ありませんが、初めてはっきりしませんでした。 – jsf

関連する問題