首页 > 解决方案 > 具有存储库模式的外观。处理简单的请求

问题描述

我正在重组一个非常古老的项目。我使用 Facade 静态类将逻辑与前端分离。我还使用工作单元类实现了存储库模式。这个想法是前端只会在外观上执行简单的请求。外观然后处理所有事情(通过子系统),这些子类将一起使用 unitofwork。前端永远不会触及解决方案中的 Persistence 项目。

我想知道我应该如何处理简单的请求。就像从表中获取特定行一样。现在我必须为每个表(250+)创建一个函数。接下来,如果我想从表中获取所有行,我必须对所有表再次执行相同的操作。这是不可行的,我无法理解它。将持久性项目作为依赖项添加到前端项目中,打破了整个分层思想。

我该如何解决这个问题?

标签: design-patternsrepository-patternfacade

解决方案


所以我缺乏知识。我不知道您可以创建泛型方法(与泛型类相反)。因此,我在外观中添加了一些默认的泛型方法。像这样:

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);
    }
}

请注意,它会跳过存储库。对我来说这没关系,因为存储库中定义的方法更复杂,并且永远不会直接从前端需要。

我希望这对将来的任何人都有帮助。


推荐阅读