Фасад с рисунком хранилища. Обрабатывать простые запросы - PullRequest
0 голосов
/ 06 ноября 2018

Я реструктурирую очень старый проект. Я отделяю логику от внешних интерфейсов, используя статический класс Facade. Я также реализовал шаблон репозитория с единицей рабочего класса. Идея заключалась в том, что интерфейс будет выполнять только простые запросы на фасаде. Затем фасад обрабатывает все (через подсистемы), и эти подклассы будут использовать unitofwork вместе. Внешний интерфейс никогда не будет касаться проекта Persistence в решении.

Мне интересно, как мне решать простые запросы. Как получить конкретную строку из таблицы. Прямо сейчас я должен сделать функцию для этого для каждой отдельной таблицы (250+). Кроме того, если я хочу получить ВСЕ строки из таблицы, мне придется сделать то же самое снова для всех таблиц. Это неосуществимо, и я не могу разобраться с этим. Добавление персистентного проекта в качестве зависимости от внешних проектов разрушает всю идею многоуровневости.

Как мне справиться с этим?

1 Ответ

0 голосов
/ 06 ноября 2018

Так что моих знаний не хватало. Я не знал, что вы могли бы создавать универсальные методы (в отличие от универсальных классов). Поэтому я добавил некоторые стандартные методы по умолчанию к фасаду. Вот так:

public static List<T> GetAll<T>() where T : class
{
    using (var unitOfWork = new UnitOfWork())
    {
        return unitOfWork.context.Set<T>().ToList();
    }
}

public static T GetSingleOrDefault<T>(Expression<Func<T, bool>> predicate) where T : class
{
    using (var unitOfWork = new UnitOfWork())
    {
        return unitOfWork.context.Set<T>().SingleOrDefault(predicate);
    }
}

Обратите внимание, что он пропускает репозитории. Для меня это нормально, так как методы, определенные в репозиториях, более сложны и никогда не понадобятся напрямую из внешнего интерфейса.

Надеюсь, это поможет кому-нибудь в будущем.

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