
- •1. Цель работы
- •2. Общие сведения
- •Жизненный цикл запроса.
- •Работа с веб-формами
- •2.2. Необходимый инструментарий
- •3. Ход работы
- •3.1. Создание шаблона mvc
- •3.2 Удаление из шаблона примеров кода
- •3.3 Создание (подключение) бд
- •3.4 Создание модели данных
- •3.5 Реализация шаблона проектирования Data Access Object
- •3.6 Создание контроллера
- •3.7 Сборка проекта
- •3.8 Создание представлений
- •3.9 Добавление новой записи в таблицу GuestBook из веб-приложения
- •4. Задание для самостоятельного выполнения
- •5. Подводя итоги
- •6. Вопросы для самопроверки
3.5 Реализация шаблона проектирования Data Access Object
Шаблон проектирования Объект доступа к данным (Data Access Object – DAO) используется для инкапсуляции доступа к источнику данных. Через данный объект в нашем случае будет обеспечиваться взаимодействие приложения и базы данных. Data Access Object всегда выносится в один или несколько дополнительных классов, работающих с источником данных, и не является частью триады Модель-Представление-Контроллер. Для каждой таблицы в БД необходимо создавать отдельный класс в DAO. На Листинге 2 показан класс DAO, реализующий соединение с базой данных. На Листинге 3 представлен RecordsDAO – наследник от DAO – класс, реализующий работу с данными в таблице GuestBook. Внесите эти классы в приложение.
Листинг 2 – Класс, реализующий соединение с БД – DAO\DAO.cs
using System.Data.SqlClient;
namespace mvcApplication.DAO
{
public class DAO
{
private const string ConnectionString =
"Data Source=.\\SQLEXPRESS;AttachDbFilename=\"D:\\Work\\Университет\\Семестр #9
(сен-дек 2009)\\Test\\mvcApplication\\App_Data\\Test.mdf\";
Integrated Security=True;User Instance=True";
private SqlConnection Connection { get; set; }
public void Connect()
{
Connection = new SqlConnection(ConnectionString);
Connection.Open();
}
public void Disconnect()
{
Connection.Close();
}
}
}
Листинг 3 – Класс, реализующий взаимодействие с таблицей GuestBook – DAO\RecordsDAO.cs
using System;
using System.Collections.Generic;
using System.Data.SqlClient;
using mvcApplication.Models;
namespace mvcApplication.DAO
{
public class RecordsDAO : DAO
{
public List<Records> GetAllRecords()
{
Connect();
List<Records> recordList = new List<Records>();
try
{
SqlCommand command = new SqlCommand("SELECT * FROM GuestBook", Connection);
SqlDataReader reader = command.ExecuteReader();
while (reader.Read())
{
Records record = new Records();
record.ID = Convert.ToInt32(reader["ID"]);
record.Author = Convert.ToString(reader["Author"]);
record.Title = Convert.ToString(reader["Text"]);
record.PublicationDate = Convert.ToDateTime(reader["PublicationDate"]);
recordList.Add(record);
}
reader.Close();
}
catch (Exception)
{
// Не обрабатывать исключительные ситуации - дурной тон
}
finally
{
Disconnect();
}
return recordList;
}
}
}
3.6 Создание контроллера
Контроллер (Controller). Является средством, при помощи которого пользователи взаимодействуют с системой, а также является управляющим элементом для обмена данными между представлением и моделью.
Для создания контроллера нажимаем правой кнопкой мыши на папке Controllers и выбираем Add/Controller… В появившемся окне задаем имя контроллера HomeController и ставим флажек напротив Add action methods for Create, Update, and Details scenarios – последнее позволит создать несколько action-методов, которые будут реагировать на запросы от представления (Рисунок 7).
Рисунок 7 – Добавление контроллера
В результате создания Home контроллера система сгенерирует следующий класс (Листинг 4):
Листинг 4 – Controllers\HomeController.cs
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;
using System.Web.Mvc.Ajax;
namespace mvcApplication.Controllers
{
public class HomeController : Controller
{
//
// GET: /Home/
public ActionResult Index()
{
return View();
}
//
// GET: /Home/Details/5
public ActionResult Details(int id)
{
return View();
}
//
// GET: /Home/Create
public ActionResult Create()
{
return View();
}
//
// POST: /Home/Create
[AcceptVerbs(HttpVerbs.Post)]
public ActionResult Create(FormCollection collection)
{
try
{
// TODO: Add insert logic here
return RedirectToAction("Index");
}
catch
{
return View();
}
}
//
// GET: /Home/Edit/5
public ActionResult Edit(int id)
{
return View();
}
//
// POST: /Home/Edit/5
[AcceptVerbs(HttpVerbs.Post)]
public ActionResult Edit(int id, FormCollection collection)
{
try
{
// TODO: Add update logic here
return RedirectToAction("Index");
}
catch
{
return View();
}
}
}
}
Чтобы можно было передавать в представление данные из модели на страницу (сделаем вывод всех контактов на странице), нужно модифицировать Home контроллер следующим образом:
Листинг 5 – Модификация Controllers\HomeController.cs
public class HomeController : Controller
{
RecordsDAO recordsDAO = new RecordsDAO();
//
// GET: /Home/
public ActionResult Index()
{
return View(recordsDAO.GetAllRecords());
}
}
Также добавим пространства имен:
using mvcApplication.Models;
using mvcApplication.DAO;