我有以下兩個 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和屬性Publisher(它具有比這兩個更多的相同屬性,這僅作為示例)。我的問題:有沒有最好的方法來處理這個而不在 API 請求類中使用相同的屬性?我可以使用繼承嗎?
如果是的話,這樣做的方法是什么?我的意思是我可以將相同的屬性放入某個父類并繼承 letTransactionGroup和TransactionHistory從該基類繼承的類嗎?這是一個好方法嗎?
uj5u.com熱心網友回復:
一般不要這樣做。
您會認為您實際上是通過在此處實作繼承或組合來洗掉冗余代碼。但是減少代碼量的代價是你永久地耦合了兩個 API 請求。將來,您可能希望更改其中一種 API 方法,而不是另一種。如果您將這兩個(甚至更多)耦合在一起,這將更加困難。
此外,通過共享代碼,您并沒有真正獲得任何可讀性。相反,它會更難閱讀,因為并不是所有的屬性TransactionHistory都可以在它的類中找到。
如果你發現代碼重復太多,你會更喜歡這樣的組合:
public class TransactionHistory
{
public CommonTransactionData common { get; set; }
public string StartDate { get; set; }
public string EndDate { get; set; }
}
在這種特殊情況下,您也可以認為使用繼承是干凈的,但通常我們遵循組合優于繼承的原則。
編輯:錯過了一個屬性名稱
uj5u.com熱心網友回復:
TransactionGroup和TransactionHistory有什么關系?一個是另一個的子型別(例如Vehicle -> Car)還是它們只是具有相同命名的屬性。ACountry和 aPerson都有 a Name,但這并不意味著您應該讓 aPerson從 a 繼承,Country反之亦然。
特別是,如果我查看您的類,它們都具有獨占屬性(即Cost僅存在于TransactionGroup和StartDate中TransactionHistory)。但是,如果您讓一個繼承另一個,則意味著另一個也將擁有所有屬性。是否有意義的Group有StartDate或是否有意義的History有Cost?如果沒有,繼承不是正確的方法。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/351530.html
