русс | укр

Языки программирования

ПаскальСиАссемблерJavaMatlabPhpHtmlJavaScriptCSSC#DelphiТурбо Пролог

Компьютерные сетиСистемное программное обеспечениеИнформационные технологииПрограммирование

Все о программировании


Linux Unix Алгоритмические языки Аналоговые и гибридные вычислительные устройства Архитектура микроконтроллеров Введение в разработку распределенных информационных систем Введение в численные методы Дискретная математика Информационное обслуживание пользователей Информация и моделирование в управлении производством Компьютерная графика Математическое и компьютерное моделирование Моделирование Нейрокомпьютеры Проектирование программ диагностики компьютерных систем и сетей Проектирование системных программ Системы счисления Теория статистики Теория оптимизации Уроки AutoCAD 3D Уроки базы данных Access Уроки Orcad Цифровые автоматы Шпаргалки по компьютеру Шпаргалки по программированию Экспертные системы Элементы теории информации

Этап II – Создание слоя доступа к данным (DAO)


Дата добавления: 2015-06-12; просмотров: 647; Нарушение авторских прав


Будьте внимательны при разработке слоя доступа к данным, поскольку он будет использоваться в следующих лабораторных работах.

5. В каталоге domain создайте три класса-домена EntityBase, Group и Student. Тексты классов приведены ниже:

 



namespace lab4.domain

{

//Класс базовой сущности

public abstract class EntityBase

{

public virtual long Id { get; set; }

}

}

 



using System.Collections.Generic;

 



namespace lab4.domain

{

//Сущность группы

public class Group:EntityBase

{

private IList<Student> studentList = new List<Student>();

 



public virtual string GroupName { get; set; }

 



public virtual string CuratorName { get; set; }

 



public virtual string HeadmanName { get; set; }

 



public virtual IList<Student> StudentList

{

get { return studentList; }

set { studentList = value; }

}

}

}

 



namespace lab4.domain

{

//Сущность студента

public class Student:EntityBase

{

public virtual string FirstName { get; set; }

 



public virtual string LastName { get; set; }

 



public virtual char Sex { get; set; }

 



public virtual int Year { get; set; }

 



public virtual Group Group { get; set; }

}

}

 



6. Создайте в каталоге dao интерфейс IGenericDAO, в котором описаны все необходимые для слоя доступа к данным методы. Набор методов определяется на этапе проектирования в зависимости от потребностей системы. Интерфейс IGenericDAO приведен ниже:

 



using System;

using System.Collections.Generic;

using System.Linq;

using System.Text;

 



namespace lab4.dao

{

public interface IGenericDAO<T>

{

void SaveOrUpdate(T item);

 



T GetById(long id);

 



List<T> GetAll();

 



void Delete(T item);

}

}

 



7. Помимо стандартного набора методов, dao каждого объекта может иметь свой собственный дополнительный список методов. Так, например, для объекта-группы таким методом является getAllStudentOfGroup (получить список студентов заданной группы). Поэтому для каждого объекта предметной области необходимо создать свои интерфейсы, которые расширяют IGenericDAO. Ниже приведены интерфейсы IGroupDAO и IStudentDAO:

 



using lab4.domain;

using System.Collections.Generic;

 



namespace lab4.dao

{

public interface IGroupDAO:IGenericDAO<Group>

{

Group getGroupByName(string groupName);

 



IList<Student> getAllStudentOfGroup(string groupName);

 



void delGroupByName(string groupName);

}

}

 



using lab4.domain;

 



namespace lab4.dao

{

public interface IStudentDAO:IGenericDAO<Student>

{

Student getStudentByGroupFirstNameAndLastName(

string groupName, string firstName, string LastName);

 



}

}

 



8. Создайте в каталоге dao абстрактную фабрику, которая будет возвращать DAO для каждой сущности:

 



namespace lab4.dao

{

abstract public class DAOFactory

{

public abstract IStudentDAO getStudentDAO();

 



public abstract IGroupDAO getGroupDAO();

 



}

}

 



9. Теперь необходимо создать реализации интерфейсов IGenericDAO, IGroupDAO, IStudentDAO и абстрактной фабрики для Fluent NHibernate. Ниже приведена реализация IGenericDAO:

 



using System;

using System.Collections.Generic;

using NHibernate;

 



namespace lab4.dao

{

public class GenericDAO<T>:IGenericDAO<T>

{

protected ISession session;

 



public GenericDAO() { }

 



public GenericDAO(ISession session)

{

this.session = session;

}

 



public void SaveOrUpdate(T item)

{

ITransaction transaction = session.BeginTransaction();

session.SaveOrUpdate(item);

transaction.Commit();

}

 



public T GetById(long id)

{

return session.Get<T>(id);

}

 



public List<T> GetAll()

{

return new List<T>(session.CreateCriteria(typeof(T)).List<T>());

}

 



public void Delete(T item)

{

ITransaction transaction = session.BeginTransaction();

session.Delete(item);

transaction.Commit();

}

}

}

 



 



10. Создайте в каталоге dao реализацию интерфейсов IGroupDAO, IStudentDAO:

 



using lab4.domain;

using NHibernate;

using System.Collections.Generic;

using NHibernate.Criterion;

 



namespace lab4.dao

{

public class GroupDAO:GenericDAO<Group>, IGroupDAO

{

public GroupDAO(ISession session) : base(session) { }

 



public Group getGroupByName(string groupName)

{

Group group = new Group();

group.GroupName = groupName;

ICriteria criteria = session.CreateCriteria(typeof(Group))

.Add(Example.Create(group));

IList<Group> list = criteria.List<Group>();

group = list[0];

return group;

}

 



public IList<Student> getAllStudentOfGroup(string groupName)

{

var list = session.CreateSQLQuery(

"SELECT Students.* FROM Students JOIN Groups" +

" ON Students.GroupId = Groups.Id" +

" WHERE Groups.GroupName='" + groupName + "'")

.AddEntity("Student", typeof(Student))

.List<Student>();

return list;

}

 



public void delGroupByName(string groupName)

{

Group group = getGroupByName(groupName);

Delete(group);

}

}

}

 



using lab4.domain;

using NHibernate;

 



namespace lab4.dao

{

public class StudentDAO:GenericDAO<Student>, IStudentDAO

{

 



public StudentDAO(ISession session): base(session) { }

 



public Student getStudentByGroupFirstNameAndLastName(

string groupName, string firstName, string lastName)

{

var list = session.CreateSQLQuery(

"SELECT Students.* FROM Students JOIN Groups" +

" ON Students.GroupId = Groups.Id" +

" WHERE Groups.GroupName='" + groupName + "'" +

" and Students.FirstName='" + firstName + "'" +

" and Students.LastName='" + lastName + "'")

.AddEntity("Student", typeof(Student))

.List<Student>();

Student student = list[0];

return student;

}

}

}

 



11. Создайте реализацию абстрактной фабрики NHibernateDAOFactory:

 



using System;

using FluentNHibernate;

using NHibernate;

 



namespace lab4.dao

{

public class NHibernateDAOFactory:DAOFactory

{

/** NHibernate sessionFactory */

protected ISession session = null;

 



public NHibernateDAOFactory(ISession session)

{

this.session = session;

}

 



public override IStudentDAO getStudentDAO()

{

return new StudentDAO(session);

}

 



public override IGroupDAO getGroupDAO()

{

return new GroupDAO(session);

}

}

}

 



12. Создадим классы проецирования объектов предметной области на базу данных. В соответствии c mapping-классами в базе данных будут создаваться таблицы и связи между ними. При использовании NHibernate вместо Fluent NHibernate вместо классов используются XML-файлы. Mapping-классы для объектов «Группа» и «Студент».

 



using FluentNHibernate.Mapping;

using lab4.domain;

 



namespace lab4.mapping

{

public class GroupMap:ClassMap<Group>

{

public GroupMap()

{

Table("Groups");

Id(x => x.Id).GeneratedBy.Native();

Map(x => x.GroupName);

Map(x => x.CuratorName);

Map(x => x.HeadmanName);

HasMany(x => x.StudentList)

.Inverse()

.Cascade.All()

.KeyColumn("GroupId");

}

}

}

 



using FluentNHibernate.Mapping;

using lab4.domain;

 



namespace lab4.mapping

{

public class StudentMap:ClassMap<Student>

{

public StudentMap()

{

Table("Students");

Id(x => x.Id).GeneratedBy.Native();

Map(x => x.FirstName);

Map(x => x.LastName);

Map(x => x.Sex);

Map(x => x.Year);

References(x => x.Group, "GroupId");

}

}

}

 



Слой доступа к данным реализован.



<== предыдущая лекция | следующая лекция ==>
Этап I - Подготовка | Этап III – Реализация слоя отображения


Карта сайта Карта сайта укр


Уроки php mysql Программирование

Онлайн система счисления Калькулятор онлайн обычный Инженерный калькулятор онлайн Замена русских букв на английские для вебмастеров Замена русских букв на английские

Аппаратное и программное обеспечение Графика и компьютерная сфера Интегрированная геоинформационная система Интернет Компьютер Комплектующие компьютера Лекции Методы и средства измерений неэлектрических величин Обслуживание компьютерных и периферийных устройств Операционные системы Параллельное программирование Проектирование электронных средств Периферийные устройства Полезные ресурсы для программистов Программы для программистов Статьи для программистов Cтруктура и организация данных


 


Не нашли то, что искали? Google вам в помощь!

 
 

© life-prog.ru При использовании материалов прямая ссылка на сайт обязательна.

Генерация страницы за: 0.743 сек.