上周末,我参加了ASP.NET Web API课程,但我很难理解它在使用方面的适用范围。做了一些谷歌研究,但仍然困惑。
我可以看到在数据库上实现CURD操作是好的,但是我应该在web api中实现业务逻辑吗?
说我有一个工作单位。检查客户是否存在于数据库中,如果是,则获取最后10个订单。这应该采用web-api中的单一方法还是两种方法来检查客户和其他方法以获取订单?到目前为止,我已经看到在单个数据库资源上实现CURD的示例。
如果我不得不想象使用web-api的应用程序架构我认为
前端 - 在MVC中 业务逻辑 - 从控制器调用的独立业务逻辑类库,它又调用Web API? 数据库逻辑 - 使用Web -API实现CURD?
答案 0 :(得分:1)
最好保持简单,这是我在大型(1000用户)企业应用程序上的结构:
2个ASP.net项目,还有3个类库。
第一个asp.net项目 - 是一个标准的MVC应用程序,但大多数情况下它只是用作所有HTML / cshtml,javascript和css资产的容器。我们使用很少甚至没有razor / controller MVC语法。这个"前端"项目是使用angular.js(单页面应用程序-SPA架构)驱动的javascript,回调第二个Asp.net web api项目来收集和收集所有数据。
第二个asp.net项目 - 正在使用ASP.net Web API 2模板。该项目负责收集所有数据。该项目从多个地方,移动/平板电脑应用程序,第一个asp.net项目调用,并向第三方公司展示,以便集成到我们的平台中。
类lib 1 (可移植类库) - 是我们的数据模型项目,它跨多个层共享,包括业务层,数据层,Web api层,因为它是一个可移植的类库,在我们的移动项目中共享。在可能的情况下,我们重用从db权限到API层的相同模型,有时这是不可能的,我们使用业务层在模型之间进行映射。
Class Lib 2 - 引用API和MVC项目。这个dll包含我们所有的业务逻辑,有时这只是一个传递层,在CRUD操作的情况下只做很少的逻辑,只调用数据层,但大多数时候所有业务逻辑都与检查字段输入相关,像你上面描述的多次调用数据库都包含在此背后。正如我之前所说,我们的第一个asp.net项目逻辑非常少,我们从前端项目中引用它的唯一原因是因为该层包含用于建立的所有身份验证,授权和权限逻辑,用户可以访问给定页面。
Class Lib 3 - 仅从我们的业务层引用,该层执行与多个数据库平台的所有数据库和中间件交互。
通过上述结构,它可以分离出来以允许注入MOQ接口,允许更容易的测试,并允许跨多个项目甚至多个设备(iOS / android / windows应用程序)进行最佳重用。我们分离2个asp.net项目的唯一原因是出于基础设施的原因,每个项目的流量配置文件完全不同,因此它允许我们优化适合流量配置文件的硬件 - 许多人将能够将这些组合成1个项目