带数据库的Http请求参数
Http requests parameters with Database
我使用 Entity framework 开发了一个网络应用程序。
我的 DbContext 中有一个 DbSet - table 字母。
控制器方法将 db 对象作为参数是一种好习惯吗?含义:
[HttpPost]
Public IHttpActionResult SendLetter(Letter letterToSend)
目前正在学习直接数据库模型的 Letter。
是不是换个型号以后再投?
Entity Framework 代码优先,至少也可以将数据对象 (dbobject) 用作 POCO 领域模型对象。我们真的不认为它主要是数据对象。它们被认为是域模型所以就是这样。
因此,问题变成了 "can i use the domain model directly in your controller action parameter?" 控制器参数的数据库对象不是用作控制器操作参数,乍一看肯定是禁忌。但是使用域模型作为操作参数:
意见当然会有所不同,但没有什么能阻止您在操作参数中按原样使用域模型。如果 API 处理的是 100% 由域模型表示的资源,那真的没有什么坏处。
话虽如此,很多时候,现实世界的应用程序往往会变得复杂。创建了多个版本,因此 v1 支持 10 个 Letters 字段,而 v2 可以支持 12 个字段。此外,还有特定的验证规则,您可能希望对某些类型的输入 运行。除此之外,并非所有请求都映射到域模型这一事实。 (补丁请求、部分更新、复合模型等)
并且随着 API 的成熟,您不希望一个 API 方法的微小变化影响多个 API,因为所有这些输入模型都受到此处更改。
因此,更安全的选择是在控制器级别为对象采用单独的 "ResourceModel" 设计。它们可以很容易地手动映射 to/from 域模型或使用 AutoMapper 等框架。是的,这很乏味,但可以帮助您在漫长的 运行 隔离验证、目标有效负载、v1 v2 特定模型等
这纯粹是基于个人十多年服务开发的经验,正如我所说,意见不一。
我使用 Entity framework 开发了一个网络应用程序。
我的 DbContext 中有一个 DbSet - table 字母。
控制器方法将 db 对象作为参数是一种好习惯吗?含义:
[HttpPost]
Public IHttpActionResult SendLetter(Letter letterToSend)
目前正在学习直接数据库模型的 Letter。 是不是换个型号以后再投?
Entity Framework 代码优先,至少也可以将数据对象 (dbobject) 用作 POCO 领域模型对象。我们真的不认为它主要是数据对象。它们被认为是域模型所以就是这样。
因此,问题变成了 "can i use the domain model directly in your controller action parameter?" 控制器参数的数据库对象不是用作控制器操作参数,乍一看肯定是禁忌。但是使用域模型作为操作参数:
意见当然会有所不同,但没有什么能阻止您在操作参数中按原样使用域模型。如果 API 处理的是 100% 由域模型表示的资源,那真的没有什么坏处。
话虽如此,很多时候,现实世界的应用程序往往会变得复杂。创建了多个版本,因此 v1 支持 10 个 Letters 字段,而 v2 可以支持 12 个字段。此外,还有特定的验证规则,您可能希望对某些类型的输入 运行。除此之外,并非所有请求都映射到域模型这一事实。 (补丁请求、部分更新、复合模型等)
并且随着 API 的成熟,您不希望一个 API 方法的微小变化影响多个 API,因为所有这些输入模型都受到此处更改。
因此,更安全的选择是在控制器级别为对象采用单独的 "ResourceModel" 设计。它们可以很容易地手动映射 to/from 域模型或使用 AutoMapper 等框架。是的,这很乏味,但可以帮助您在漫长的 运行 隔离验证、目标有效负载、v1 v2 特定模型等
这纯粹是基于个人十多年服务开发的经验,正如我所说,意见不一。