Я разрабатываю программное обеспечение для отображения объектов ModelView на основе DataModel.
DataModel отображается объектом ModelView, который сам может содержать группу объектов ViewObject. Это похоже на контейнер ViewObjects, который представляет собой ModelView и, наконец, отображает DataModel.
Эти объекты ViewObject могут зависеть друг от друга внутри ModelView, поэтому, например, положение одного объекта ViewObject может зависеть от другого.
Затем также определяется макет окончательного экрана на основе всех ModelView.
Эти ViewObject наследуются от общего класса BaseView, но клиент может просто добавлять новые типы ViewObject в иерархию, наследуя от класса BaseView. Эти производные классы могут иметь специальные функции, которые могут быть вызваны для соединения их вместе в ModelView.
Не могли бы вы, кто-нибудь, дать мне идею, как сделать это без динамического приведения?
РЕДАКТИРОВАТЬ: я определил следующий класс:
class EventView // ModelView class containing
{
private:
//Pointer to BaseViews constituting to ModelView
std::shared_ptr<BaseView> m_FlowView;
std::shared_ptr<BaseView> m_SourceView;
std::shared_ptr<BaseView> m_TargetView;
std::shared_ptr<BaseView> m_WorkerView;
std::shared_ptr<TEvent> m_Model;
}
Клиент может наследовать от BaseView, что BaseView может быть линией или окружностью, кривой или чем-то еще. Следовательно, они могут быть совершенно разными. С моей точки зрения, мне нужен всего лишь список объектов BaseView, чтобы нарисовать их, но клиентский код отвечает за их взаимосвязь и размещение. Но так как я буду хранить только указатели BaseView, клиент может нуждаться в понижении для соединения элементов.