如何组织由多个列表组成的模型

时间:2015-07-30 20:40:18

标签: java model-view-controller model

我有一个模型,其中包含新闻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);       
   }

我真的认为这种做法根本不合理。

1 个答案:

答案 0 :(得分:1)

我建议创建一个新的Story课程。它可能是一个几乎是空的类,但它可能包含一些有用的东西,如dateWritten,适用于所有类型的Story。然后,您可以简单地让CarStorySportStory扩展您的父类Story

然后,您的新闻源不会包含繁琐的List<SportStory>List<CarStory>,但只会包含List<Story>

如果您需要查看故事的类型,那么您可以使用instanceof而不是跟踪从int到说明的地图。例如,如果someStory instanceOf SportStory类型为true,您可以someStory返回SportStory