首页 > 解决方案 > 如何对不同的 API 请求使用相同的属性

问题描述

我有以下两种 API 方法:

[HttpPost]
public ActionResult<TransactionReadDto> TransactionGroup(TransactionGroup transactionGroup)
{
    // some code goes here
}

[HttpPost]
public ActionResult<TransactionReadDto> TransactionHistory(TransactionHistory transactionHistory)
{
    // some code goes here
}

而上面的代码TransactionGroupTransactionHistory类如下:

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; }
}

您可以看到这两个类对于Nameand具有相同的属性Publisher(它具有比这两个更多的相同属性,这仅用于示例)。我的问题:有没有最好的方法来处理这个而不在 API 请求类中使用相同的属性?我可以使用继承吗?

如果是的话,这样做的方法是什么?我的意思是我可以将相同的属性放入某个父类并继承 letTransactionGroup并且TransactionHistory类从该基类继承吗?这是一个好方法吗?

标签: c#oopinheritanceasp.net-core-webapi

解决方案


一般来说,不要这样做。

您会认为您实际上是通过在此处实现继承或组合来删除冗余代码。但是减少代码量的代价是你永久地耦合了两个 API 请求。将来您可能希望更改其中一种 API 方法,但不更改另一种。如果您将这两个(甚至更多)耦合起来,这将更加困难。

此外,通过共享代码,您并没有真正获得任何可读性。相反,它会更难阅读,因为并非所有属性TransactionHistory都可以在其类中找到。

如果您发现确实有太多的代码重复,您会更喜欢这样的组合:

public class TransactionHistory
{
  public CommonTransactionData common { get; set; }
  public string StartDate { get; set; }
  public string EndDate { get; set; }
}

在这种特殊情况下,您也可以认为它使用继承是干净的,但通常我们遵循组合优于继承的原则

编辑:错过了一个属性名称


推荐阅读