1

評価ツール用に作業しているオブジェクトモデルのガイダンスを探しています。現在、2種類の評価があります

  • ピア
  • チーム

これら2つの評価の唯一の違いは、UIでフォームがユーザーに表示される方法です。ピア評価では、いくつかの基準に基づいて評価する必要があるチーム内のピアが表示され、チーム評価では、いくつかの基準に基づいて評価される関係するすべてのチームが表示されます。それ以外は、これら2つの評価はまったく同じです。

オブジェクトモデルを構築するとき、抽象的な評価オブジェクトを作成してから、ピア評価とチーム評価をサブクラス化する必要がありますか?または、Evaluationオブジェクトを作成し、2つの異なるタイプの評価を表す2つの属性を持つ必要がありますか?

将来的には、より多くの種類の評価が追加される可能性があります。

4

3 に答える 3

4

一般に、型が単なる情報である場合は、それをフィールドにします。次のようなメソッドの動作を変更するために使用される場合

public void foo() {
    if (type == PEER) {
        doSomething();
    }
    else {
        doSomethingElse();
    }
}

その場合、サブクラス化し、ポリモーフィズムを使用して、型に応じて適切な動作を取得する必要があることを示しています。別の解決策は、継承ではなく委任を使用し、動作を型に関連付けることです。

public enum EvaluationType {
    PEER {
        @Override
        public void foo() {
            ...
        }
    },
    TEAM {
        @Override
        public void foo() {
            ...
        }
    };

    public abstract void foo();
}

public class Evaluation {
    private EvaluationType type;

    public void foo() {
        return this.type.foo();
    }
}
于 2013-01-04T21:29:29.090 に答える
0

少し考えてみると、この情報を評価オブジェクト自体に格納するのは間違った方法のように思えます。実世界の例であるカボチャの種を考えてみましょう。さて、私は種をまくか、種を焼いて食べることができました. 実際、与えられた種子について、私はどちらか一方に行くことができますが、両方には行けません.いくつかの種子は食べるために取っておかれ、いくつかは植えるために取っておかれていますが、その分割は種子自体とはほとんど関係がありません.

そのため、別の場所で区別をエンコードすることをお勧めします...おそらく、別々のコレクション (チームとピア) を維持し、必要に応じてそれらを UI に転送する EvaluationModel があります。他の人がそれをどのように使用するかを評価が気にする必要があるのはなぜですか? あなたが必要としているのは、世話をすることを仕事とする実体であり、その人にどんな区別をつけさせるかです.

于 2013-01-04T21:29:48.483 に答える
0

共通のプロパティとメソッドをインターフェイスに取り出します ICommon と言って、チームを編成し、ICommon を実装する独自のインターフェイスをピアリングします...

interface ICommon{
}

interface ITeam:ICommon{
}

interface IPeer:ICommon{
}

次に、各インターフェイス(IPeerおよびITeam)を実装し、EvaluationManager(ある場合)は、各オブジェクトをいつインスタンス化するかを認識します

于 2013-01-04T21:33:55.763 に答える