Project将WebAPI暴露给外部客户端,它们将在查询字符串中嵌入多个参数值,此查询字符串数据将存储在DB中。
问题 我的愚蠢问题是如何将查询字符串值从WebAPI操作传递到业务层。
我可以想到两种方式: 1.将完整的Request对象传递给业务层。 2.将查询字符串参数转换为列表或数组,并将该列表/数组传递给业务层。
你认为传递请求在系统上有点过分或负担。我只是认为它在尺寸方面可能是一个沉重的对象。
如果我转换查询字符串参数,我是否正在针对开发良好实践或微软推荐做什么?
我非常感谢您的指导。
答案 0 :(得分:1)
你可能会认为这有点过分,但我在描述他的MediatR库时遵循了Jimmy Bogard写的一些指导:
要点是将传入的请求映射到DTO对象(通常是简单的数据类),并使用管道将它们传递到业务层。这要求您映射Request对象,但是在API(WebAPI处理的)和业务域(当然是您自己的代码处理)的关注点之间提供了非常清晰的分离。
我一直在基于制造业的API中使用这种方法,并取得了非常积极的成果。
答案 1 :(得分:0)
业务层应独立于调用它的层。如果将整个Request对象传递到业务层,则会将业务层与WebAPI紧密耦合,后者被视为bad practice。想想另一种情况:如果您想从控制台应用程序或Windows服务调用相同的业务层,该怎么办?当然,您不想构建一个完整的Request对象,只是为了调用业务层。
由于您有从WebAPI到业务层的引用,您应该在业务层上定义参数对象。因此,您的业务层可以将其用作WebAPI在根据接收的请求填充后在方法调用中提供的参数。这促进了松散耦合,使您的业务层能够在不影响WebAPI层的情况下进行更改,反之亦然。
还考虑处理WebAPI层中的异常,因为在这里您可以返回正确的HTTP状态代码,即在找不到请求的对象时404 NOT FOUND。