-4

私は現在、推薦システムに取り組んでいます。私は次のようなクラス Recommend を設計しました:

class Recommend{
    Path path; //recommended path, self-defined class. This is the problem!
    //some parameters and Models        
    private Map<Integer, List<Integer>> Model1;
    //...other pram and models

    //methods
    public void getPath();
    public double score(int place);//
}

ここに私の問題があります: モデルをロードして Recommend のインスタンスを構築します。次に、そのインスタンスの getPath メソッドを呼び出してパスを検索します。私のパスは時間に敏感で、適切な時間とともに場所のリストが含まれています。

class Path{
    List<Integer> path;
    List<Integer> times;
    double socre;

    public void add(int place, double time);
}

add(int, double) を呼び出して場所と対応する時間をパスに追加し、その間に新しいパスのスコアを更新したいと思います。そこで、Recommend のメソッドである score(int) を呼び出したいと思います。

Path をどのように設計すればよいですか? Recommend の内部クラスにする必要がありますか?

アップデート

getPath(int place, double startTime);
//try greedy searching to find a time sensitive path that scored highest, 
//go through all possible places and scored them.

socre(int place, double time);
//In fact there are multiple score methods correspond to different models,
//**and notice here I modify the param to int place from Path path**
//This function evaluates the score of current place and time(used in greedy searching)

add(int place, double time);
//add a new place and time(which is proved by greedy searching to be the best)
//I want this update the score of place itself...okay maybe I should place this function in Recommend
4

2 に答える 2

1

「getPath()」メソッドは問題の一部です。それは「何もしません」。あなたの「推奨」クラスは、パスをスコアリングするように設計されているように見えます-そして、パスは実際に推奨の外に公開されているようには見えません。あなたが考えているのは、「add(int place, double time)」である Recommand の新しいメソッドを公開し、そのメソッドにパスを更新させてから、PRIVATE の「scorePath()」メソッドを呼び出すことです。その場合、唯一の機能はデータ構造を保持することであるため、パスは内部クラスである必要があります。

JavaDoc 内の各クラスの目的を書き留めることで、何をしようとしているのかを明確にすることができます。各クラスには明確な目的が 1 つあります。たとえば、「パス」を「推奨」の外に表示する必要がないことがわかった場合は、それを非公開メンバーにすることができます。

于 2013-03-29T06:39:42.600 に答える
0

インナー クラスまたはコンポジションを使用する場合(これまでに行ったように)、目標を達成できます。Separation of Concernあなたは原則に従っていないので、物事はより複雑だと思います。

Recommendクラス内でgetPath()およびscore()メソッドが必要な理由を考えてみてください。add()メソッドと同様に、 getPath()もPathクラスの一部である必要があります。

于 2013-03-29T06:40:32.700 に答える