design-patterns - 具有存储库模式的外观。处理简单的请求
问题描述
我正在重组一个非常古老的项目。我使用 Facade 静态类将逻辑与前端分离。我还使用工作单元类实现了存储库模式。这个想法是前端只会在外观上执行简单的请求。外观然后处理所有事情(通过子系统),这些子类将一起使用 unitofwork。前端永远不会触及解决方案中的 Persistence 项目。
我想知道我应该如何处理简单的请求。就像从表中获取特定行一样。现在我必须为每个表(250+)创建一个函数。接下来,如果我想从表中获取所有行,我必须对所有表再次执行相同的操作。这是不可行的,我无法理解它。将持久性项目作为依赖项添加到前端项目中,打破了整个分层思想。
我该如何解决这个问题?
解决方案
所以我缺乏知识。我不知道您可以创建泛型方法(与泛型类相反)。因此,我在外观中添加了一些默认的泛型方法。像这样:
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);
}
}
请注意,它会跳过存储库。对我来说这没关系,因为存储库中定义的方法更复杂,并且永远不会直接从前端需要。
我希望这对将来的任何人都有帮助。
推荐阅读
- angular - 制作角度图像裁剪器功能
- insert - 插入语句内的表中的自动增量 ID
- python - 尝试重置密码时出现 Djongo + Django + MongoDB Atlas DatabaseError
- python - AssertionError: [101, 1203, 1365, 1137, 8601, 117, 4835, 1104, 1141, 1292, 119, 102, 0, 0, 0, 0, 0, 0, 0, 0] 不是
- c++ - 为什么复制初始化需要 C++17 中的析构函数并保证移动/复制省略?
- python - 创建 Pandas.Dataframe 时如何保持索引中的顺序
- javascript - 仅将 .map() 方法用于副作用是否合法?
- c# - ASP.NET MVC 5 - 使用带有或不带有 __RequestVerificationToken 的 ajax 将视图模型数组发布到控制器
- x86 - WinDbg:地址中的冒号是什么意思?
- mysql - 为什么 MySQL 会更改不同数据库中查询的联接类型