Модель C ++ MVC для представления модели "перевода" и наследования - PullRequest
0 голосов
/ 20 февраля 2012

В моем игровом проекте я использую схему MVC. Модель и Вид полностью разделены. Вид управляется паттерном наблюдателя. Поэтому, когда что-то случится с представлением игрового объекта (создать, уничтожить, обновить, ...), слушатель получит уведомление Когда новая сущность в модели выделяется, тогда мне нужно создать правильную модель представления (EntityMesh).

  • EntityMesh является базой для модели представления
  • Игра :: Сущность является основой для модели

для этого примера дерево деривации модели выглядит следующим образом:

  • Game :: Entity -> Game :: PhysicalEntity -> Game :: PhysicalGridEntity
  • Game :: Entity -> Game :: ActorEntity -> Game :: FreeActorEntity

Вот как я сейчас "решаю" эту проблему ... но в будущем я ожидаю более 30 производных от Game :: Entity и EntityMesh. И это очень уродливый и не ООП дизайн.

EntityMesh* WorldView::_translate(Game::Entity* const ent)
{  
    //TODO: finish translator...
    std::cout << "TRANSLATING!: " << typeid(ent).name() << std::endl;

    Game::PhysicalGridEntity* pgent = dynamic_cast<Game::PhysicalGridEntity*>(ent);
    if(pgent)
    {
        std::cout << "CREATING: PhysicalGridEntity" << std::endl;
        return new PhysicalGridEntityMesh(this, pgent);
    }
    else
    {
        Game::PhysicalEntity* pent = dynamic_cast<Game::PhysicalEntity*>(ent);
        if(pent)
        {
            std::cout << "CREATING: PhysicalEntity" << std::endl;
            return new PhysicalEntityMesh(this, pent);
        }
        else
        {
            Game::FreeActorEntity* faent = dynamic_cast<Game::FreeActorEntity*>(ent);
            if(faent)
            {
                std::cout << "CREATING: FreeActorEntity" << std::endl;
                return new FreeActorEntityMesh(this, faent);
            }
        }
    }

    return NULL;
};

есть идеи, как сделать это более понятным и более ООП, не смешивая View и Model?

РЕДАКТИРОВАТЬ: Любая подсказка, какой шаблон использовать поможет:)

1 Ответ

2 голосов
/ 20 февраля 2012

Прежде всего, у вас нет компонента контроллера.Где ваша бизнес-логика, которая связывает модель и представление?Во-вторых, я не уверен, что вы пытаетесь делать со всеми этими ifs, но, возможно, шаблоны фабрики / посетителей помогут вам.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...