我有一个模型,其中包含新闻Feed中使用的几个列表。例如,有不同的体育故事和汽车故事列表。我想知道我应该如何组织这些。
class NewsFeed{
public List<SportStory> sportStories;
public List<CarStory> carStories;
public Map<int, String> storyType;
public Map<int, int> storyPositions;
public String getType(int position){
storyType.get(position);
}
public String getPositionInList(int position){
storyPositions.get(position);
}
}
class SportStory{
public String sportName;
public String imageUrl;
public String notablePlayer;
public int favourites;
}
class CarStory{
public int storyType;
public String carName;
public String carType;
public String carColor;
}
然后,视图通过使用getType
函数检查故事的类型,使用正确的模板呈现模型中的故事。它使用getPositionInList
获取故事位置
例如,该视图是渲染第五个故事。它将使用getType
函数并发现它是一个汽车故事。然后,它会使用getPositionInList
看到新闻Feed中的第五个故事对应于汽车故事列表中的第二个项目。
我遇到的另一个问题是,如果添加不同类型的故事,则必须更改此类。
如果在视图上触发了事件,则在控制器上调用回调。
public void onSportStoryFavourited(int id){
SportStory story = getSportStoryById(id);
story.favourites = story.favourites + 1;
dao.updateSportStory(story);
view.onStoryFavourited(id);
}
我真的认为这种做法根本不合理。
答案 0 :(得分:1)
我建议创建一个新的Story
课程。它可能是一个几乎是空的类,但它可能包含一些有用的东西,如dateWritten
,适用于所有类型的Story
。然后,您可以简单地让CarStory
或SportStory
扩展您的父类Story
。
然后,您的新闻源不会包含繁琐的List<SportStory>
和List<CarStory>
,但只会包含List<Story>
。
如果您需要查看故事的类型,那么您可以使用instanceof
而不是跟踪从int
到说明的地图。例如,如果someStory instanceOf SportStory
类型为true
,您可以someStory
返回SportStory
。