У меня возникли проблемы с пониманием шаблона MVC. Я понимаю, что мы пытаемся отделить GUI от бизнес-логики, хотя у меня возникают проблемы с пониманием того, как.
Из того, что я понял, View
- это то, что видит пользователь. Так что это обычно окно/форма. Controller
находится в промежутке между View
и Model
. Контроллер будет передавать данные "поток" в обоих направлениях. Он также будет сохраняться в случае необходимости (если у меня есть мастер с 5 шагами, это отвечает Controller
, чтобы убедиться, что они сделаны в правильном порядке и т.д.). Model,
- это то место, где живет ядро моей логики приложения.
Правильно ли это мнение?
Чтобы попытаться превратить это во что-то более значимое, я попытаюсь набросать простой пример с WinForms (без ASP.NET или WPF, пожалуйста!) в толпу java, из того, что я понял, Swing работает аналогично WinForms!), чтобы узнать, правильно ли я это сделаю, и я буду поднимать вопросы, к которым я всегда прихожу, делая это.
Предположим, что у меня есть модель, содержащая только класс (просто чтобы это стало проще). Я знаю, что это сделает этот пример глупым, но тем более проще):
class MyNumbers {
private IList<int> listOfNumbers = new List<int> { 1, 3, 5, 7, 9 };
public IList<int> GetNumbers() {
return new ReadOnlyCollection<int>(listOfNumbers);
}
}
Теперь пришло время сделать мой Controller
:
class Controller
{
private MyNumbers myNumbers = new MyNumbers();
public IList<int> GetNumbers() {
return myNumbers.GetNumbers();
}
}
View
должен иметь только ListBox
, который имеет в качестве элементов все числа, полученные в MyNumbers
.
Теперь возникает первый вопрос:
Должен ли Controller
отвечать за создание MyNumbers
? В этом простом случае я считаю его приемлемым (как MyNumbers
будет делать то же самое, независимо от того, что и не имеет связанного состояния). Но допустим, что я хотел бы использовать для всех разных контроллеров мое приложение имеет тот же экземпляр MyNumbers
. Я должен был бы передать этому Controller
(и всем остальным, кому это нужно) этот экземпляр MyNumbers
, который я хочу использовать. Кто будет отвечать за это? В примерах WinForms это будет View
? Или это будет класс, который создает View
?
Обоснование вопроса: каков порядок создания этих трех частей? Что такое код, который вызвал "владелец" MVC
для его создания?
Должно ли Controller
создавать как View
, так и Model
? Если View
создает экземпляр Controller
и Controller
Model
?
Второй вопрос:
Как должен выглядеть метод main
, если я хочу, чтобы мое приложение имело Use Case
этот Controller
портрети?
Третье:
Почему на следующей диаграмме MVC View
есть стрелка к Model
? Должен ли Controller
быть всегда мостом между View
и Model
?
У меня будет еще один или два вопроса, но они, вероятно, будут более понятны, если я пойму эту первую деталь. Или, может быть, после того, как я пойму этот первый вопрос, все остальные разлучаются.
Спасибо!