2012-02-17 9 views
2

DrivingLogという集約クラスを作成しました。私は下の写真の中に必要なフィールドだけを入れました。ネストを含む集約オブジェクト

今、ドライブレコードを追加したいときは、DrivingLogオブジェクトにaddRecord(Double distance, ...)と言っています。ただし、DrivingRecordはConditionクラスとクラスの集計であるか、または参照のみですか?条件と環境には値がありませんDrivingRecord

静的データ:ユーザーは、JSFビューのドロップダウンリストで事前定義された値の中から選択します。しかし、DrivingRecordが集合体の場合は、addEnviroment()という名前のメソッドが必要です。これは引数としてEnviromentクラスを取るべきですか?

この場合、DrivingLogにはaddRecord(Double distance, Environment environment...)という名前のメソッドがありますか?

最後に、環境と条件が集約ルートによって「隠され」、決して外側にアクセスされるべきではありません。これはDrivingRecordが本当に集約されたルートであるかどうかを考えさせます。

集約のネストは許可されていますか、悪い習慣ですか、場合によってはokですか?

enter image description here

+0

申し訳ありませんがあなたの質問に直接関係はありませんが、ダイアグラムの作成にはどのように使用しましたか?ありがとう。 – Martin

+0

IntelliJ IDEA 11、CTRL-ALT-SHIFT-U。 – LuckyLuke

答えて

1

私はaddRecord(ダブル距離、...)を言う運転記録を追加したいとき

私はあなたのためのAPIとして、代わりにaddRecord(DrivingRecord record)をお勧めしたいですサービス。

は、条件と環境クラスの集約であるDrivingRecordですか?条件と環境は1つのDrivingRecordの外に値がありません。

私はあなたが意味するかもしれないが、私は両方の答えが正しいと思います - DrivingRecordは集計です。 Javaのオブジェクト "handel"は参照とみなされます)。 ポイントは、BLOBとして渡されるのではなく、 "new XYZ"(またはスタックにメソッドの引数として渡されるプリミティブの場合はスタック)をインスタンス化した場合、ヒープメモリへの4バイト参照として渡されます。また、生き物によって参照される限り、ガベージコレクションされません。

条件と環境は静的データです。ユーザーは、JSFビューのドロップダウンリストで事前定義された値の中から選択します。しかし、DrivingRecordが集合体の場合は、addEnviroment()というメソッドが必要です。 Enviromentクラスを引数に取るべきでしょうか?

DrivingRecordのインスタンスを作成した後、Listへの参照の挿入を許可する必要があります。

この場合、DrivingLogにaddRecord(Double distance、Environment environment ...)というメソッドがありますか?

パラメータが相互に関連しているかどうかは知りませんが、それは彼らが別々に加えることができ、私はそのようなことをお勧めしたい:

class DrivingRecord { 
    private ArrayList<Enviroment> env; 
    private ArrayList<Condition> cond; 
    private Double distance; 
    addEnvironment(Enviroment e) { env.add(e); } 
    addCondition(Condition c) { cond.add(c); } 
    setDistance(Double d) { distance=d;} 
} 

そして最後に、shouldn」環境と条件は集約ルートによって「隠され」、決して外側にはアクセスされません。これはDrivingRecordが本当に集約されたルートであるかどうかを考えさせます。

確認

は、いくつかのケースでもOK許さ集合体の入れ子、悪い習慣、ですか?

あなたのプロジェクトの目標についてはほとんど分かりませんが、より良いアーキテクチャがあるかどうかはわかりません。しかし、それは確かに悪いことではありません。

+0

@bob - あなたはそこにいますか? – auval