2015-07-30 2 views
0

У меня есть модель, состоящая из нескольких списков, которые используются в ленте новостей. Например, существуют различные списки спортивных рассказов и истории автомобилей. Мне интересно, как я должен их организовать.Как организовать модель, состоящую из нескольких списков

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, чтобы увидеть, что пятая история в ленте новостей соответствует второму пункту в списке истории автомобилей.
Другая проблема заключается в том, что при добавлении разных типов рассказов этот класс должен быть изменен.

Если событие события инициировано в представлении, обратный вызов вызывается на контроллере.

public void onSportStoryFavourited(int id){ 
     SportStory story = getSportStoryById(id);  
     story.favourites = story.favourites + 1; 
     dao.updateSportStory(story); 
     view.onStoryFavourited(id);  
    } 

Я действительно не думаю, что этот подход звучит вообще.

ответ

1

Я предлагаю сделать новый класс Story. Это может быть почти пустой класс, но он может содержать что-то полезное, например dateWritten, которое будет применяться ко всем видам Story. Затем вы можете просто добавить свой CarStory или SportStory продлить родительский класс Story.

Тогда ваша новостная лента не будет содержать громоздких List<SportStory> и List<CarStory>, но только List<Story>.

Если вам нужно было проверить, в каком виде история, то вы можете использовать instanceof вместо отслеживания карты от int к описанию. Например, вы можете сделать someStory instanceOf SportStory, который вернет true, если someStory имеет тип SportStory.

+0

Каким образом просмотр или контроллер получат конкретные типы данных из разных сюжетных объектов? Различные истории могут содержать очень разные данные. – Benten

+0

@Benten В своем суперклассе Story вы можете иметь переменную типа экземпляра и getType() accessor. Вы можете вызвать этот метод в объектах Story, чтобы посмотреть, какой тип сюжета они есть, отнести их и обработать их оттуда. – BoDidely

+0

@Benten Возможно, вы захотите принять этот ответ, если он вам поможет. – bourbaki4481472

Смежные вопросы