-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) 为路径添加一个地点和对应的时间,同时更新新路径的分数。所以这里我要调用score(int),这是一个Recommend的方法

我应该如何设计 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()”方法是问题的一部分;它“什么都不做”。您的“推荐”课程似乎旨在为路径评分 - 并且该路径似乎并未实际暴露在 Recommend 之外。您可能会考虑在 Recommand 上公开一个新方法,即“add(int place, double time)”,并让该方法更新路径,然后调用 PRIVATE“scorePath()”方法。那么 path 应该是一个内部类,因为它的唯一功能是保存数据结构。

您可以通过在 JavaDoc 中写下每个类的用途来阐明您想要做什么。每个班级应该有一个明确的目的。例如,如果您完成此操作后发现“路径”不需要出现在“推荐”之外,那么您可以将其设为私有成员。

于 2013-03-29T06:39:42.600 回答
0

使用Inner ClassComposition的天气(正如您所做的那样),您可以实现您的目标。我认为事情更复杂,因为你没有遵循Separation of Concern原则。

想想为什么在Recommend类中需要getPath()score()方法。像add()方法一样,您的getPath()也应该是Path类的一部分。

于 2013-03-29T06:40:32.700 回答