Я использую nHibernate.
Мои классы POCO, которые соответствуют 1: 1 таблицам моей базы данных.
Я создал IGenericDAO -> GenericDAO, который выполняет все мои основные CRUD. (Хранилище)
Каждая таблица имеет класс DAO, поэтому:
открытый класс UserDAO: GenericDAO
Любые специфичные для таблицы запросы будут идти в класс tableDAO.
У меня тогда есть фабрика, IDAOFactory.
public class NHibernateDAOFactory : IDAOFactory
{
public static UserDAO GetUserDAO()
{
return new UserDAO();
}
}
Возможное улучшение:
1. Просто мое веб-приложение не усеяно:
IDAOFactory dbFactory = new NHibernateDAOFactory();
Я думал о создании:
public class DAOFactoryFactory
{
public static IDAOFactory Load()
{
return new NHibernateDAOFactory();
}
}
Таким образом, у меня есть единственная точка изменения в случае, если мне нужно поменять местами слои базы данных. (т.е. переключаться между linq2sql и nhibernate, но не уверен, что это возможно в реальности)
Какие-нибудь предложения / указатели о том, как улучшить это, или это довольно солидно?