DP>>Это всё упращенно и поэтому должно быть всё понятно.
A>Но модель же не должна знать о контроллерах?
A>Спасибо.
Смысл MVC — отделить бизнес-логику от представления, т.е. во View не должно быть ни какой БЛ а только отображение данных и передача в Контроллер реакции (событий) (действий) (нажатия на кнопки и т.п.).
DP>>>Это всё упращенно и поэтому должно быть всё понятно.
A>>Но модель же не должна знать о контроллерах?
A>>Спасибо.
DP>Смысл MVC — отделить бизнес-логику от представления, т.е. во View не должно быть ни какой БЛ а только отображение данных и передача в Контроллер реакции (событий) (действий) (нажатия на кнопки и т.п.).
то есть под событиями подразумевается изменение данных в модели
то есть юзер изменил что то в одном виде — изменение пошло в модель через конртроллер,
а потом на все контроллеры и через них на все остальные виды?
Но можно же вообще отделить модель переложить эту задачу только на контроллеры?
Здравствуйте, Adopt, Вы писали:
A>то есть под событиями подразумевается изменение данных в модели A>то есть юзер изменил что то в одном виде — изменение пошло в модель через конртроллер, A>а потом на все контроллеры и через них на все остальные виды?
A>Но можно же вообще отделить модель переложить эту задачу только на контроллеры?
Можно, способов раелизации MVC много и нужно использовать наиболее подходящий в каждом конкретном случаии, а не бездумно лепить стандартный шаблон ко всем ситуациям. Но если сразу очень сложно спроектировать архитектуру программы то можно начать с простого .... к сложному.
Здравствуйте, DigitPower, Вы писали:
DP>Здравствуйте, Adopt, Вы писали:
A>>то есть под событиями подразумевается изменение данных в модели A>>то есть юзер изменил что то в одном виде — изменение пошло в модель через конртроллер, A>>а потом на все контроллеры и через них на все остальные виды?
A>>Но можно же вообще отделить модель переложить эту задачу только на контроллеры?
DP>Можно, способов раелизации MVC много и нужно использовать наиболее подходящий в каждом конкретном случаии, а не бездумно лепить стандартный шаблон ко всем ситуациям. Но если сразу очень сложно спроектировать архитектуру программы то можно начать с простого .... к сложному.
именно так и хочется сделать
отсюда возникают два вопроса:
1) Сколько в средне приходиться перерабатывать архитектуру приложения?
2) Какие источники нужно использовать, в смысле где описывается и где есть примеры MVC?
Здравствуйте, Adopt, Вы писали:
A>
A> именно так и хочется сделать A> отсюда возникают два вопроса:
A> 1) Сколько в средне приходиться перерабатывать архитектуру приложения? A> 2) Какие источники нужно использовать, в смысле где описывается и где есть примеры MVC?
1. Переделывать только в случае если вдруг сильно меняется ТЗ и это влияет на архитектуру.
Может быть только доработка.
A>Объясните пожалуйста как можно свзязать A>паттерн Модель — Представление — Контроллер в оконном приложении
Как это делал я. Идея такая. Модель содержит коллекцию геометрий. Вьюшка отображает модель и передаёт сообщения системы контроллерам. Контроллеры делают основную работу по модификации данных модели и режимов отображения вьюшки.
Модель:
class CVisualizationDoc : public CDocument
{
public:
...
// Тут методы для доступа к данным и т.п.
...
};
Вьюшка:
class CVisualizationView : public CView
{
public:
...
virtual void OnDraw(CDC* pDC);
afx_msg void OnLButtonUp(UINT nFlags, CPoint point);
afx_msg void OnLButtonDown(UINT nFlags, CPoint point);
afx_msg void OnMouseMove(UINT nFlags, CPoint point);
...
private:
Controller* m_pActiveController;
};
// Выбираем текущий контроллер, кнопками на тулбареvoid CVisualizationView::OnController(UINT uID)
{
m_uCurrentControllerID = uID;
delete m_pActiveController;
switch(m_uCurrentControllerID)
{
// Меняем область отображения у вьюшкиcase ID_CONTROLLER_ZOOM_IN:
m_pActiveController = new ZoomInController(this);
break;
case ID_CONTROLLER_ZOOM_OUT:
m_pActiveController = new ZoomOutController(this);
break;
// Редактируем существующие обьекты, модифицируем модельcase ID_CONTROLLER_EDIT:
m_pActiveController = new EditController(this);
break;
case ID_CONTROLLER_CREATE:
m_pActiveController = new CreatePolygonController(this);
break;
default:
m_pActiveController = NULL;
}
}
// Отрисовываем выбраный - нажатымvoid CVisualizationView::OnUpdateController(CCmdUI* pCmdUI)
{
pCmdUI->SetCheck(pCmdUI->m_nID == m_uCurrentControllerID);
}
// Вьюшка получила сообщение от системы(пользователя) которое обрабатывает контроллерvoid CVisualizationView::OnMouseMove(UINT nFlags, CPoint point)
{
if(m_pActiveController != NULL)
m_pActiveController->OnMouseMove(nFlags, point);
CView::OnMouseMove(nFlags, point);
}
...