带有存储库模式的外观。处理简单请求
Facade with repository pattern. Handle simple requests
我正在重组一个非常古老的项目。我使用 Facade static class 将逻辑与前端分开。我还用一个工作单元 class 实现了存储库模式。这个想法是前端只会在外观上做简单的请求。然后外观处理所有事情(通过子系统),那些子classes 将一起使用工作单元。前端永远不会触及解决方案中的 Persistence 项目。
我想知道我应该如何处理简单的请求。就像从 table 中获取特定行一样。现在我必须为每个 table (250+) 创建一个函数。接下来,如果我想从 table 中获取所有行,我必须对所有 table 再次执行相同的操作。这是不可行的,我无法理解它。将持久性项目作为依赖项添加到前端项目打破了整个分层的想法。
我该如何解决这个问题?
所以我缺乏知识。我不知道您可以创建泛型方法(反对泛型 类)。因此,我在外观中添加了一些默认的泛型方法。像这样:
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);
}
}
请注意,它会跳过存储库。对我来说这没关系,因为存储库中定义的方法更复杂,永远不会直接从前端需要。
我希望这对以后的任何人都有帮助。
我正在重组一个非常古老的项目。我使用 Facade static class 将逻辑与前端分开。我还用一个工作单元 class 实现了存储库模式。这个想法是前端只会在外观上做简单的请求。然后外观处理所有事情(通过子系统),那些子classes 将一起使用工作单元。前端永远不会触及解决方案中的 Persistence 项目。
我想知道我应该如何处理简单的请求。就像从 table 中获取特定行一样。现在我必须为每个 table (250+) 创建一个函数。接下来,如果我想从 table 中获取所有行,我必须对所有 table 再次执行相同的操作。这是不可行的,我无法理解它。将持久性项目作为依赖项添加到前端项目打破了整个分层的想法。
我该如何解决这个问题?
所以我缺乏知识。我不知道您可以创建泛型方法(反对泛型 类)。因此,我在外观中添加了一些默认的泛型方法。像这样:
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);
}
}
请注意,它会跳过存储库。对我来说这没关系,因为存储库中定义的方法更复杂,永远不会直接从前端需要。
我希望这对以后的任何人都有帮助。