2014-10-27 37 views
0

项目向外部客户端公开WebAPI,他们将在查询字符串中嵌入多个参数值,并将此查询字符串数据存储在数据库中。如何将查询字符串参数从WebAPI传递到业务层?

问题 我的愚蠢问题是我应该如何将查询字符串值从WebAPI动作传递给业务层。

我可以想到两种方法: 1.将完整的请求对象传递给业务层。 2.将查询字符串参数转换为列表或数组,并将该列表/数组传递给业务层。

你认为传递请求是一种过度使用或系统上的burdon。我只是认为它在规模上可能是一个沉重的对象。

如果我转换查询字符串参数,我正在做一些反对发展的良好做法或微软推荐?

我非常感谢您的指导。

+1

我建议不传递Request对象。这在你的业务层强制依赖于'System.Web.Http',你应该尽量避免在可能的情况下。 – trnelson 2014-10-27 01:25:40

+0

@trnelson高度赞赏你的观点。 在良好实践方面,可以将数据从请求传输到对象并发送到业务层?我一般认为服务应该只暴露商业层,并且应该在商业层面拥有所有东西(逻辑)? – user576510 2014-10-27 01:29:12

+0

@trnelson是否WebAPI自动将查询字符串参数转换为对象或JSON/XML?或者我需要手动做?请指导。 – user576510 2014-10-27 01:30:01

回答

0

业务层应独立于调用它的图层。如果您将整个Request对象传递到业务层,那么您将业务层紧密耦合到WebAPI,这被认为是bad practice。想想另一种情况:如果你想从控制台应用程序或Windows服务调用同一业务层,该怎么办?当然,你不想在那里构造一个完整的Request对象来调用业务层。

由于您从WebAPI到业务层的引用,应该在业务层上定义一个参数对象。因此,您的业务层可以使用它作为WebAPI可以在方法调用中提供的参数,然后根据请求接收到的请求填充它。这会促进松耦合,并使业务层在不影响WebAPI层的情况下进行更改,反之亦然。

也考虑在WebAPI图层中处理异常,因为这是一个您可以返回正确的HTTP状态代码的位置,即当找不到请求的对象时404 NOT FOUND。

0

你可能会认为这是矫枉过正,但我​​随后吉米博加德写了一些指导,而描述他的MediatR库:

https://lostechies.com/jimmybogard/2014/09/09/tackling-cross-cutting-concerns-with-a-mediator-pipeline/

其要旨在于,你进入的请求DTO对象(即通常映射简单的数据类),并使用管道将它们下放到业务层。这要求你映射你的Request对象,但是在API的关注点(WebAPI处理)和你的业务领域(当然你自己的代码处理)之间提供了非常干净的分离。

我一直在基于制造的API中使用这种方法,并取得了非常积极的结果。

相关问题