c# - 如何对不同的 API 请求使用相同的属性
问题描述
我有以下两种 API 方法:
[HttpPost]
public ActionResult<TransactionReadDto> TransactionGroup(TransactionGroup transactionGroup)
{
// some code goes here
}
[HttpPost]
public ActionResult<TransactionReadDto> TransactionHistory(TransactionHistory transactionHistory)
{
// some code goes here
}
而上面的代码TransactionGroup
和TransactionHistory
类如下:
public class TransactionGroup
{
public string Name { get; set; }
public string Publisher { get; set; }
public string Cost { get; set; }
}
public class TransactionHistory
{
public string Name { get; set; }
public string Publisher { get; set; }
public string StartDate { get; set; }
public string EndDate { get; set; }
}
您可以看到这两个类对于Name
and具有相同的属性Publisher
(它具有比这两个更多的相同属性,这仅用于示例)。我的问题:有没有最好的方法来处理这个而不在 API 请求类中使用相同的属性?我可以使用继承吗?
如果是的话,这样做的方法是什么?我的意思是我可以将相同的属性放入某个父类并继承 letTransactionGroup
并且TransactionHistory
类从该基类继承吗?这是一个好方法吗?
解决方案
一般来说,不要这样做。
您会认为您实际上是通过在此处实现继承或组合来删除冗余代码。但是减少代码量的代价是你永久地耦合了两个 API 请求。将来您可能希望更改其中一种 API 方法,但不更改另一种。如果您将这两个(甚至更多)耦合起来,这将更加困难。
此外,通过共享代码,您并没有真正获得任何可读性。相反,它会更难阅读,因为并非所有属性TransactionHistory
都可以在其类中找到。
如果您发现确实有太多的代码重复,您会更喜欢这样的组合:
public class TransactionHistory
{
public CommonTransactionData common { get; set; }
public string StartDate { get; set; }
public string EndDate { get; set; }
}
在这种特殊情况下,您也可以认为它使用继承是干净的,但通常我们遵循组合优于继承的原则。
编辑:错过了一个属性名称