совет относительно моего уровня DAL, какие-либо очевидные проблемы с этим? - PullRequest
1 голос
/ 04 декабря 2009

Я использую 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, но не уверен, что это возможно в реальности)

Какие-нибудь предложения / указатели о том, как улучшить это, или это довольно солидно?

Ответы [ 2 ]

1 голос
/ 04 декабря 2009

Вы можете рассмотреть возможность использования контейнера DI вместо того, чтобы надеяться, что наличие только одного места, где вы new фабрика, защитит вас от дальнейших изменений. Кроме того, вызов метода фабрики Load немного сбивает с толку - почему бы не назвать его CreateDAO вместо этого?

0 голосов
/ 04 декабря 2009

Вероятность того, что вы сможете поменять реализацию ORM, невелика. Я бы использовал контейнер IoC (StructureMap). Определите интерфейсы для вашего Dao, а затем внедрите их в ваши сервисы через контейнер ioc.

...