c# - 是否使用存储库模式?需要 ORM? MVC 网络 API REST

标签 c# asp.net-mvc entity-framework rest asp.net-web-api

<分区>

我对构建 restful web api 还很陌生,但我已经做了很多研究并且对基础知识有很强的理解。我已经使用 web api 2 的最新最佳实践为我的公司构建了一个服务。属性路由和路由前缀、依赖注入(inject)等等。我认为我的服务非常可靠,但可能需要重构。

我的公司正在考虑从 MS SQL 迁移到 PostGreSql 或可能是其他数据库解决方案。另外,我应该提一下,我们不使用 EF 或任何其他 ORM。我们不使用 EF 的原因是因为我们的数据库模式在不断变化,而且我们有许多彼此不同的环境(dev、qa、prod 等)。所以我们开发了自己的框架来处理我们对数据库的查询。我们经常使用存储过程来检索数据。

因此,更改我的服务以适应不同的数据库,存储库模式似乎是解决方案。然而,当我开始研究它时,感觉就像我们添加了很多开销代码,而实际上,如果 DB 确实发生更改,只需返回并重构服务,编写的代码可能会更少。对于我的每个 Controller ,我至少需要编写一个 IModelRepository 和 ModelRepository 类。

任何人都可以提供任何指导吗?

编辑:

我不太确定如何让这个问题不那么宽泛。我对存储库模式了解不够,无法在我的问题中更详细地说明。我基本上只是想知道存储库模式是否是解决 future 可能在 Web api MVC 服务中更改数据库解决方案的问题,即使我没有使用类似 ORM 的 Entity Framework ?

我问是因为我在网上找到的每个示例似乎都使用 EF,这使得它很难与我当前的问题相关联。但是,最佳答案给出了非常好的解释,我认为我的问题得到了解答。我只需要找到一个很好的资源来学习模式。谢谢。

最佳答案

存储库模式试图避免您的数据映射层(或简称为数据层),这有时取决于所选的底层数据技术。

虽然您可能觉得这在您的具体用例中毫无用处,但我会尝试用一个非常简单的论点来说服您:数据访问细节将在您的存储库中强制执行,这意味着您的数据策略将是在那里自给自足。换句话说:您的域将对数据访问方法保持不可知,如果您将来需要更改它,您将不需要更改成千上万的代码行。

结论:即使在您的场景中,存储库模式也是有用的。留下您的域代码来解决域问题,而不是将所有内容混合在真正的意大利面条代码中!

控制反转的故事......

当存储库模式遇到控制反转时,一切都会变得更加强大,因为您可以通过配置切换域转换为数据的方式,并且您可以强制执行更多的松散耦合和和关注点分离

打败这个;)

关于c# - 是否使用存储库模式?需要 ORM? MVC 网络 API REST,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30850180/

相关文章:

c# - 未经验证就发布

c# - 获取 EF 投影中从刻度转换的 TimeSpan 的 TimeSpan 属性

c# - EF Core 包含在集合类属性中

c# - 与 VB.Net Linq Group Join 和 Into 关键字等效的 C# Linq 是什么?

c# - Cookie 身份验证和 Asp Net Core 2.0 迁移

ASP.NET MVC : How should it work with subversion?

asp.net - 为网站的私有(private)测试版添加安全层的最不显眼的方法是什么?

c# - 在 linq 查询中调用自定义方法

c# - 以编程方式在 Entity Framework mvc 4 中创建表

c# - 无法从我的程序写入另一台计算机中的 XML 文件