gpt4 book ai didi

c# - 根据存储库模式,存储库应该提供查询还是实际实体?

转载 作者:行者123 更新时间:2023-11-30 15:08:25 24 4
gpt4 key购买 nike

我目前正在重构使用 ASP.NET MVC3 和 C# 和 Razor 开发的 Web 应用程序的代码。为了更好地构建我的应用程序,我使用的模式之一是 Repository pattern ,除了是一个非常有用的模式之外,它也是开发人员社区中经常讨论的问题。

在这种情况下,我找到了 Fredrik Normen 发表的一篇文章其中指出,根据存储库的定义,存储库类必须提供实际实体(例如 .NET 中的 List)而不是可查询对象(.NET 中的 IQueriable)。而不是在 NerdDinner tutorial来自 ASP.NET MVC 官方网站,当存储库必须提供同一对象的多个实例时,他们使用 IQueriable;当存储库必须提供对象的单个实例时,他们使用实际实体。

根据存储库模式对存储库类/接口(interface)进行建模时,最正确的方法是什么?

谢谢

弗朗切斯科

最佳答案

在我看来这种事情不利于您的时间使用。 ;-)

理论上,您的存储库应该返回对象或它们的传统集合,是的。但是,即使您链接到的存储库模式的定义也使用术语“类集合接口(interface)”。当然,IQueryable<Entity>是一个“类集合”界面,是吗?

在实践中,我几乎从不考虑区别...但我总是尝试将所有查询代码放在存储库中。我会说 90% 的基于集合的存储库方法返回传统集合,而其他 10% 返回基于 IQueryable<> 的内容。 .异常通常与分页有关;因此,如果需要,我可以从查询中获取总计,如果不需要的话,我不必提前获取该信息。这有点懒,但对我有用。

但我确实认为始终尝试返回传统集合是个好主意,因为这意味着您将所有查询都封装在存储库中,而这正是它应该存在的地方。我建议只是不要太拘泥于坚持某人对 pattern-X 要求的想法的极端水平

关于c# - 根据存储库模式,存储库应该提供查询还是实际实体?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5632730/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com