У меня возникли проблемы с пониманием шаблона 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?
![]()
У меня будет еще один или два вопроса, но они, вероятно, будут более понятны, если я пойму эту первую деталь. Или, может быть, после того, как я пойму этот первый вопрос, все остальные разлучаются.
Спасибо!