Будьте внимательны при разработке слоя доступа к данным, поскольку он будет использоваться в следующих лабораторных работах.
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:
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:
12. Создадим классы проецирования объектов предметной области на базу данных. В соответствии c mapping-классами в базе данных будут создаваться таблицы и связи между ними. При использовании NHibernate вместо Fluent NHibernate вместо классов используются XML-файлы. Mapping-классы для объектов «Группа» и «Студент».