MVC4客户端获取异步与调用业务逻辑/存储库获取数据
本文关键字:获取 存储 数据 业务 客户端 异步 调用 MVC4 | 更新日期: 2023-09-27 18:21:09
我们正在从Web表单迁移到MVC4体系结构。我们的Web API和MVC在同一个解决方案中。所以我们很少有选择:
1) 要么我们可以从我们的MVC控制器调用Web API,就像其他客户端所做的那样:var响应=等待客户端。GetAsync("api/方法");
由于MVC和Web API都在同一个项目中,我们很困惑放置这个额外的HTTP调用是否有意义,如果我们以与Web API完全相同的方式直接访问存储库/businessLayer,则可以避免这种调用。(代码几乎没有重复,但性能优势)
2) 我们有许多资源可以满足多种这样的请求。例如,我们必须调用8-10个不同的存储库来获取数据。
可能的解决方案(我们应该如何从MVC控制器获取数据):1) 我们应该通过客户端调用这些多个存储库吗。GetAsync方法,该方法将异步地从存储库中获取所有数据。异步意味着并行逻辑会更快。缺点是我们有额外的HTTP调用来调用不同的API。或2) 我们是否应该像这些Web API最终所做的那样,一个接一个地直接调用这8-10个存储库?我看不出这有多大好处,因为它是同步的。唯一的好处是我们避免了额外的HTTP调用。但这需要额外的重复代码成本。(从Web API和MVC访问相同的BL/存储库代码)。我不知道是否可以使用某种异步方法从MVC控制器调用存储库?
我们应该选哪一个?一个具有异步编程功能的额外HTTP调用,或者直接访问存储库,或者如果有人可以建议两者混合使用?
当然是一个有趣的问题,我也不得不做出这个决定。最有趣的部分是用户身份验证。MVC和Web API都有一个很好的身份验证过程。API当然是为无状态http调用(在每个经过身份验证的请求上使用令牌)而制作的,MVC使用cookie和所有其他东西。
对我来说,更好的选择是将这种身份验证分开,同时仍然指向同一个数据库,这样就不会每次访问数据库时都调用我的API。尽管API运行在同一台服务器上,但我确信直接调用数据库会更快。
我认为如果你做对了,就不会有那么多重复的代码。首先,有一个应用程序核心项目,如果它更大,那么就有一个数据库核心和一个web核心。您的业务逻辑应该为您的应用程序执行业务。如果它是一个api或mvc应用程序,我认为您希望用这两个应用程序实现相同的目标:以安全可控的方式获取或更新数据。但不要犯这样做的错误。在你的mvc/api项目的控制器中有一些逻辑是可以的。
从维护的角度来看:对BL进行类型安全调用,然后通过API请求进行调用,这样做会更安全,这可能会改变功能(或者你必须到处更新版本)。
建筑,这是一个有趣的世界。