Шаблон репозитория без интерфейсов - PullRequest
0 голосов
/ 18 декабря 2011

что плохого в реализации шаблона хранилища без интерфейсов?

Хранилище - класс

public class WebRepository<T>
{
    private readonly Type persitentType = typeof(T);
    public virtual T GetById(int id)
    {
        return NHibernateSession.Get<T>(id);
    }
    public virtual List<T> GetAll()
    {
        return GetByCriteria();
    }
    public List<T> GetByCriteria(params ICriterion[] criterion)
    {
        ICriteria criteria = NHibernateSession.CreateCriteria(persitentType);
        foreach (ICriterion criterium in criterion)
            criteria.Add(criterium);
        return criteria.List<T>() as List<T>;
    }
    public T Save(T entity)
    {
        NHibernateSession.Save(entity);
        return entity;
    }
    public T SaveOrUpdate(T entity)
    {
        NHibernateSession.Update(entity);
        return entity;
    }
    public void Delete(T entity)
    {
        NHibernateSession.Delete(entity);
    }
    private ISession NHibernateSession
    {
        get
        {
            return SessionManager.CurrentSession;
        }
    }
}

если мы хотим расширить репозиторий, который мы используем ProductRepository: методы репозитория и переопределения \ расширения.

Я знаю, что интерфейсы позволяют нам:

  • Использовать методы TDD
  • Заменить двигатель сопротивления

Но если я не хочу заменять свой nhibernate и у меня не будет достаточно времени для написания тестов. Так в чем же другие преимущества использования классического шаблона репозитория (с IRepository<T>, IProductRepository)

Спасибо, Андрей

Ответы [ 2 ]

6 голосов
/ 18 декабря 2011

Нет ничего плохого в реализации шаблона хранилища без интерфейсов, вам решать, хотите ли вы использовать интерфейсы или нет.

Как вы указали веские причины для использованияИнтерфейсы предназначены для отвлечения вашего уровня персистентности от уровня бизнес-логики и, конечно, для удобства тестирования.Однако, если вы можете гарантировать , вы не будете менять свой бэкэнд (или, по крайней мере, не сможете предвидеть его изменение в ближайшем будущем) и не собираетесь писать тесты ( большая ошибка) тогда, вероятно, вам не нужно использовать интерфейсы.

Красный флаг, который я вижу, - " не хватает времени для написания тестов ".Это может иметь место сейчас, однако, как насчет будущего, когда у вас будет время?Опять же, это ваше решение, однако, если бы вы были на вашем месте, я бы использовал интерфейсы (даже если вы вообще не писали тесты), так как это не принесло бы вашему коду никакого вреда и не заняло бы столько времени для этого, иизбавит вас от лишних хлопот в будущем, если вы когда-нибудь решите сменить бэкэнд или написать тесты.

0 голосов
/ 18 декабря 2011

Mocking!
Ваша база данных может быть недоступна по какой-то причине, и с помощью интерфейса вы можете очень легко переключаться между реальными данными и фиктивными данными.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...