我正在推荐推荐系统。我设计了一个类推荐:
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),这是一种推荐方法
我应该如何设计Path,它应该是推荐的内部类吗?
更新
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
答案 0 :(得分:1)
您的“getPath()”方法是问题的一部分;它“什么都不做”。您的“推荐”类似乎是为了对路径进行评分而设计的 - 并且路径似乎并未实际暴露在“推荐”之外。您可能会考虑做的是在Recommand上公开一个新方法,即“add(int place,double time)”,并让该方法更新路径,然后调用PRIVATE“scorePath()”方法。然后path应该是一个内部类,因为它的唯一功能就是保存数据结构。
您可以通过在JavaDoc中写下每个类的目的来阐明您要做的事情。每个班级都应该有一个明确的目的。例如,如果您已经完成了该操作,则发现“路径”不需要出现在“推荐”之外,那么您可以将其设为私人会员。
答案 1 :(得分:0)
使用内部类或成分的天气(正如您所做的那样),您可以实现目标。我认为事情更复杂,因为你没有遵循Separation of Concern
原则。
想一想为什么在推荐类中需要 getPath()和得分()方法。与 add()方法一样, getPath()也应该是路径类的一部分。