c# - API 请求对象的泛型或继承
问题描述
我知道这可能是一个基于意见的问题,但是,我宁愿问,因为这可能有一些设计原则。
我有一个 .net C# Web API 应用程序来公开几个 API 来从数据库中检索一些数据。我也在这个项目上使用了 mediateR。API,它们都获得一个请求对象,但它们都具有完全相同的属性。想象一下,我们有一个BaseProduct
类,从项目中继承了ProductA
,ProductB
和。现在,我需要公开 API 以将这三个对象返回给用户。这是两个请求对象的示例。ProductC
domain
有继承:
public abstract class BaseGetProductRequest { // the props here }
public class GetProductARequest : BaseGetProductRequest, IRequest<GetProductAResponse> { }
public class GetProductBRequest : BaseGetProductRequest, IRequest<GetProductBResponse> { }
public class GetProductAResponse { public ProductA[] Products {get; set;} }
上述每个请求也都有自己的请求处理程序类。
使用泛型:(BaseProduct
是继承不同产品类型的域对象类)
public class GetProductRequest<TProductType> : IRequest<TProductType[]> where TProductType : BaseProductType { // all props in here }
这将在 API 中像这样使用:
public async Task<ProductA[]> Get([FromRoute] GetProductRequest<ProductA> request) { // API body }
所以,问题是:从设计的角度来看,以下哪一个是更好的方法?
- 采取上述继承方法
- 或者使用泛型实现请求和请求处理程序,这样我们最终会得到更少的文件
就个人而言,我更喜欢第一种方法,因为我希望每个 API 都有单独的请求对象,这样对我来说它看起来更干净,除了与其余代码一致(因为并非所有请求对象都可以通用实施)。此外,如果将来有任何机会需要为请求对象添加特定于类型的属性,那么我们的代码会随着这种变化而更加灵活。
是否有任何具体的设计指南建议例如接管另一个?提前感谢您的意见。
解决方案
由于已编译请求的可重用性,继承方法肯定会给您的项目带来更高的性能
推荐阅读
- node.js - 具有匹配、查找和项目的 mongodb 聚合
- android - Retrofit2 拦截器调用 2 API
- c++ - 在c ++中的结构内创建声明的数组a [1]的多个实例
- google-cloud-platform - Google BigQuery 对 AvrologicalTypes 的支持
- java - 在异步多线程环境中维护时间顺序
- windows - Gitlab runner:验证 vs 状态
- soap - SharePoint 2010 以递归方式获取所有文件和文件夹
- html - 如何增量搜索网站中的文件?
- opencv - 从 1000 多张图像中模糊人物
- django - 如何修改我的登录名以验证电子邮件?