You are on page 1of 32

Въведение в MVC

Model-View-Controller

Раз
на р аб от
с о ф ка
т уе
р

Учителски екип
Обучение за ИТ кариера
https://it-kariera.mon.bg/e-learning/
Съдържание
1. Какво представлява MVC?
2. Поток на управлението /Control Flow/
3. Обща архитектура
4. Трислоен модел и MVC
5. Пример с елементарно конзолно
приложение

2
MVC
 Шаблон за дизайн (Design Pattern) с три
свързани един с друг компонента
 Модел (Model) – управлява данните и
логиката на приложението
 Изглед (View) – слой за представяне
(presentation layer)
 Контролер (Controller) –
преобразува
входните данни в команди и ги изпраща
към Изгледа или към модела
3
MVC – поток на управлението
(Web) клиент
Запитване

Контролер Отговор
(html, json, xml),
Актуализира конзола
модела
Потребителско
Известява Актуализира действие
изгледа
Модел Изглед

4
Обща архитектура

Хранилище Услуга Контролер


Repository Service Controller

База от Изглед
данни View
Database
Обекти на Модели/
физическо ОПД Заден
ниво Models/ план
Entities DTO Backend
5
Трислоен модел и MVC
На пръв поглед MVC и трислойния модел са едно и също
нещо, но това не е така
 Прилики
 Разделя на три части

 Разлики
 При MVC моделът и изгледът могат да са свързани, постигайки
триъгълна структура
 При трислойния модел задължително се преминава през слоя
за услугите, постигайки линейна структура
6
MVC – елементарен пример/ ниско ниво
static void Main(string[] args) Изглед
{ Модел
Console.Write("Моля въведете страната на квадрат а = ");
Услуга
double a = double.Parse(Console.ReadLine());
Контролер
double P = 4 * a;
double S = a * a;
           
Console.ReadKey();
}
Открийте още изгледи, модели, услуги и контролери в примера
7
Какво научихме в този час?
 MVC е шаблон за дизайн
 MVC подобрява яснотата на кода и структурата
му
 Моделът представлява данните
 Изгледът определя начина за въвеждане и
извеждане на данните
 Контролерът казва в кои изгледи, кои данни да
се покажат или въведат
 MVC и 3-слойният модел се различават 8
Въведение в MVC
Структура на проекта

Ра з
на р абот
с о ф ка
т уе
р
Съдържание
1. MVC структура
2. Модел
3. Изглед
4. Контролер

10
Структура на проекта
 Проект ConsoleMVC
 Program.cs – главна програма

 Model – папка съдържаща класове описващи модели

 Views – папка съдържаща класове описващи изгледи

 Controllers – папка съдържаща класове описващи


контролери

11
Класът Program
Ще използваме Program класът като входна точка. Тук ще
създадем контролера, който ще управлява всичко.
class Program
{
static void Main(string[] args)
{
TipCalculatorController t =
new TipCalculatorController();
}
}
12
Модел
 Съдържа две полета amount (сума) и percent (процент).
 Съдържа свойства за тях
 Прави изчисленията и управлява данните
 Този клас не се интересува от изгледа и контролера

13
Изглед
 Изгледът е клас, в който се описва конкретен потребителски
интерфейс
 Може да се ползва както за въеждане, така и за извеждане
на данни
 Може да е свързан с модел (DTO – data transfer object), а
може и да не е свързан с модел

14
Контролер
 Свързва изгледа и модела.
 Създава инстанция на изгледа
 Създава инстанция на модела
 Предава данни към изгледа

15
Въведение в MVC
Реализация на програма

Раз
р аб
отк
ан
а со
фт у
ер
Съдържание
1. Program.cs
2. Model/Tip.cs
3. Views/Display.cs
4. Controllers/TipCalculatorController.cs

17
Класът Program
Ще използваме Program класът като входна точка. Тук ще
създадем контролера, който ще управлява всичко. Възможно
е да се наложи да добавите using ConsoleMVC.Controllers;
class Program
{
static void Main(string[] args)
{
TipCalculatorController t =
new TipCalculatorController();
}
}
18
Модел
 Две полета за сума и процент
 Свойство за сумата
 Свойство за процент с валидация на процент
 Конструктор с 2 параметъра; конструктор по подразбиране
без параметри
 Метод CalculateTip()
 Метод CalculateTotal()

19
Класът Tip
 Полета private double amount;
private double percent;
 конструктори по подразбиране
public Tip(double amount, double percent) {
Amount = amount;
Percent = percent;
Верижно извикване на горния
}
конструктор, подавайки му нули
като параметри по подразбиране
public Tip() : this(0, 0) { }
20
Класът Tip(2)
 Свойство за сумата
public double Amount
{
get { return amount; }
set { amount = value; }
}

21
Класът Tip(3)
 Свойство за процента Въведеният процент може да е
цяло число или десетична дроб
public double Percent
по-малка от 1. Ако е по-голямо
{
get { return percent; }
от 1, се дели на 100, така най-
set голямата възможна стойност е
{ 100%
if (value > 1)
{
value /= 100.0;
}
percent = value;
}
}
22
Класът Tip(4)
 публични методи
public double CalculateTip()
{
return Amount * Percent;
Общо за плащане
}

public double CalculateTotal()


{
return CalculateTip() + Amount;
}
23
Изглед
 Клас Display.cs
 Полета / свойства за: процент, сума, бакшиш, обща сума
 Конструктор по подразбиране

24
Класът Display
 Свойства:
public double Percent { get; set; }

public double Amount { get; set; }

public double Total { get; set; }

public double TipAmount { get; set; }

25
Класът Display(2)
 Конструктор:
public Display()
{
Percent = 0;
Amount = 0;
Total = 0;
TipAmount = 0;
GetValues();
}

26
Класът Display(3)
Частен метод за въвеждане
 Метод за въвеждане на данни, извикван от
конструктора
private void GetValues()
{
Console.WriteLine("Enter the amount of the meal:");
Amount = double.Parse(Console.ReadLine());
Console.WriteLine("Enter the percent you want to tip: ");
Percent = double.Parse(Console.ReadLine());
}

27
Класът Display(4)
 публични свойства методът е публичен, така
може да се извеждат данни с
public void ShowTipandTotal() извикване от контролера
{
Console.WriteLine("Your tip is {0:C}", TipAmount);
Console.WriteLine("The total will be {0:C}", Total);
}

28
Контролер
 Свързва изгледа и модела.
 Създава инстанция на изгледа
 Създава инстанция на модела
 Предава данни към изгледа
 Забележка: Тук трябва да добавите /имайте предвид, че
името на проекта е ConsoleMVC/:
using ConsoleMVC.Model;
using ConsoleMVC.Views;
29
Класът TipCalculatorController
 полета
Тук се създават полета за
private Tip tip; всички модели и изгледи,
които желаем да се
private Display display;
използват в рамките на
контролера

30
Класът TipCalculatorController (2)
Конструктор по подразбиране
public TipCalculatorController()
{
display = new Display();
tip = new Tip(display.Amt, display.Percentage);
display.TipAmount = tip.CalculateTip();
display.Total = tip.CalculateTotal();
display.ShowTipandTotal();
}

31
Какво научихме в този час?
 Структурата на MVC проекта е добре да е
разпределена в 3 отделни подпапки:
 Controllers – съдържаща контролер класовете
 Model – съдържаща класовете за моделите
 Views – съдържаща изгледите
 Разгледахме примерен код за мини MVC
приложение

32

You might also like