В этой статье я хочу как можно проще пояснить паттерн (шаблон) MVC (Model View Controller).
Недавно я пошел в книжный магазин, чтобы узнать есть ли у них интересующая меня книга. Так вот, когда я возвращался домой, мне блеснула идея, как проще на примере показать его реализацию. Собственно, давайте я вам расскажу туже схему. По началу, я пришел и спросил про наличие книги. После чего начался поиск по базе. Когда поиск закончился, я получил ответ. Теперь уясним что ж из этого модель, что представление, а что контроллер.
Так вот, ответ, который я получил, это - представление, продавец контроллер, который знает, как говорить с моделью, то есть с базой данных, где он и добывает для меня ответ!
Если все это представить программно, то представлением будет форма, на которой есть поле, куда пользователь будет вводить вопрос. Представление этот вопрос посылает контроллеру. Контроллер делает свое дело, посылая запрос модели. После получения результата, контроллер дает ответ представлению. Уже в самом представление, конечный пользователь увидит ответ!
База данных на схеме и класс, который умеет общаться с нею – не обязательно! Все это может делать сама модель. Просто с моей точки зрения и взгляда на мир ООП, так грамотнее.

А теперь такая схема:

- Пользователь вводит вопрос и нажимает кнопку.
- Контроллер получает запрос и обращается к модели.
- Модель каким то образом дает ответ!
Теперь код:
Представление:
namespace MVC
{
public partial class View : Form
{
// создаем объект класса Controller
Controller controller = new Controller();
public View()
{
InitializeComponent();
}
private void button1_Click(object sender, EventArgs e)
{
if (textBox1.Text != "")
// выводим результат
MessageBox.Show(controller.Question(textBox1.Text));
}
}
}
Контроллер:
namespace MVC
{
class Controller
{
public string Question(string msg)//msg - то что ищем
{
Model model = new Model();
return "На даный момент у нас товар "
+ model.GetAnser(msg);
}
}
}
Модель:
namespace MVC
{
class Model
{
//question - то что ищем
public string GetAnser(string question)
{
return DataBase.GetAnser(question);
}
}
}
Класс помощник. Умеет общаться с базой данных:
namespace MVC
{
static class DataBase
{
//question - то что ищем
public static string GetAnser(string question)
{
string path = "D:\\shop.txt";// путь к базе даных ):
// создаем обьект (читатель)
using (StreamReader sr =
new StreamReader(path, Encoding.Default))
{
string str = null;
while (true)
{
//если пустая то это конец
str = sr.ReadLine();
if (str != null)
{
//если считаная строчка
//равна строке для поиска
if (str == question)
return "есть в наличие.";
}
else
return "нет в наличие.";
}
}
}
}
}
Тестируем:

Видим, что в текстовом файле есть такая запись, по этому ответ следующий:

Код очень простой! Надеюсь, что все было понятно!