存储库模式与否?需要ORM吗? MVC Web api REST

时间:2015-06-15 16:23:27

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

我很擅长构建宁静的网络api,但我一直在做很多学习,并且对基础知识有很深的理解。我使用web api 2的最新最佳实践为我的公司构建了一个服务。属性路由和路由前缀,依赖注入等等。我认为我的服务非常可靠,但可能需要重构。

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

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

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

编辑:

我不确定如何使这个问题不那么广泛。在我的问题中,我对存储库模式的了解不够详细。我基本上,只是想知道存储库模式是否是未来在web api MVC服务中可能更改数据库解决方案的问题的解决方案,即使我没有使用类似ORM的实体框架?

我问,因为我在网上找到的每个例子似乎都使用EF,因此很难与我当前的问题联系起来。然而,最佳答案给出了一个非常好的解释,我认为我的问题得到了回答。我只需要找到一个很好的资源来学习模式。感谢。

2 个答案:

答案 0 :(得分:2)

存储库模式尝试使用数据映射层来避免紧密耦合(或者只是将其称为数据层< / em>),偶尔依赖于选择的基础数据技术。

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

结论:即使在您的场景中,存储库模式也很有用。保留您的域代码以解决域问题,而不是将所有内容混合在一个真正的spaguetti代码中!

控制故事的倒置......

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

打败这个;)

答案 1 :(得分:1)

不使用EF似乎是错误的。 EF将是在很大程度上抽象出数据库的存储库。您希望能够定位不同的数据库产品。 EF擅长这一点。

引入实体框架来解决问题。