我需要有关构建一个宁静的API项目的请求 - 响应模型的最佳方法的建议。
我有所有API响应的基类:
public class BaseResponse
{
public string Id { get; set; }
public string Name { get; set; }
}
如果我使用以下方法仅返回客户Id
和Name
,并且暂时,则客户无需返回其他字段...
[HttpGet]
[Route("Customer")]
public Task<IActionResult> GetCustomers()
{
var result = _customerManager.GetCustomers(ModelState);
return ReturnResponse(result, ModelState);
}
...然后我的问题是:以下哪项是GetCustomers
方法和Manager
类的更好实现?
1 - 使用BaseResponse
directy返回我的数据:
public List<BaseResponse> GetCustomers(ModelStateDictionary modelState)
{
return new List<BaseResponse>().Add(
new BaseResponse { id = "1", Name = "Mike" },
new BaseResponse { id = "2", Name = "Tom" }
);
}
或
2 - 为CustomerResponseModel
创建一个新类,如下所示,并使用它来返回我的数据 - 首先将其保持为空 - 以考虑我不知道的新字段但是可能会在将来添加。
public class CustomerResponseModel : BaseResponse
{
}
public List<CustomerResponseModel> GetCustomers(ModelStateDictionary modelState)
{
return new List<CustomerResponseModel>().Add(
new CustomerResponseModel { id = "1", Name = "Mike" },
new CustomerResponseModel { id = "2", Name = "Tom" }
);
}
我知道这两种方法都没有内存或性能缺陷,但我需要知道这种情况的最佳实践。
第二种方法只有一个已知的缺点:如果我将它应用于同一案例中使用的所有项目实体,它将影响服务器端的项目大小,这是非常常见的,因为会有太多的空类在我的项目中,只从BaseResponse
继承。
从设计和结构的角度来看,我需要您对我项目的最佳方法提出建议,并想知道是否存在任何其他缺点。
答案 0 :(得分:1)
在这种情况下,我总是想到YAGNI(&#34;你Aren需要它&#34;)和KISS(&#34;保持简单,小&#34;)原则。因此,如果您不知道将来是否有必要,请不要这样做。它降低了程序的复杂性并提高了可维护性。
可维护性,因为当我使用你的类并看到返回类型是&#34; BaseResponse&#34;时,我知道响应是一个简单的数据传输对象,总是具有相同的字段。所以我不必探索每个继承的类。