![](/img/trans.png)
[英]How to merge methods with the same body but different signatures together?
[英]What to name 2 methods with same signatures
最初我在DL中有一個方法可以接收它正在更新的對象:
internal void UpdateCash(Cash Cash)
{
using (OurCustomDbConnection conn = CreateConnection("UpdateCash"))
{
conn.CommandText = @"update Cash
set captureID = @captureID,
ac_code = @acCode,
captureDate = @captureDate,
errmsg = @errorMessage,
isDebit = @isDebit,
SourceInfoID = @sourceInfoID,
PayPalTransactionInfoID = @payPalTransactionInfoID,
CreditCardTransactionInfoID = @CreditCardTransactionInfoID
where id = @cashID";
conn.AddParam("@captureID", cash.CaptureID);
conn.AddParam("@acCode", cash.ActionCode);
conn.AddParam("@captureDate", cash.CaptureDate);
conn.AddParam("@errorMessage", cash.ErrorMessage);
conn.AddParam("@isDebit", cyberCash.IsDebit);
conn.AddParam("@PayPalTransactionInfoID", cash.PayPalTransactionInfoID);
conn.AddParam("@CreditCardTransactionInfoID", cash.CreditCardTransactionInfoID);
conn.AddParam("@sourceInfoID", cash.SourceInfoID);
conn.AddParam("@cashID", cash.Id);
conn.ExecuteNonQuery();
}
}
我的老板覺得每次更新一兩個字段創建一個對象都是過度的。 但是我在代碼中有幾個地方使用它。 他建議只使用UpdateCash並發送我想要更新的CAsh和字段的ID。 好吧問題是我使用原始方法在代碼中有2個位置。 這兩個地方正在更新現金表中2個完全不同的字段。 在我能夠獲得現有現金記錄並將其推入Cash對象之前,然后更新我想要在DB中更新的屬性,然后將現金對象發送回上面的方法。
我需要一些關於如何做的建議。 我有2種方法,它們具有相同的簽名。 我不太確定要重命名這些內容,因為它們都在更新Cash表中的2個完全不同的字段:
internal void UpdateCash(int cashID, int paypalCaptureID)
{
using (OurCustomDbConnection conn = CreateConnection("UpdateCash"))
{
conn.CommandText = @"update Cash
set CaptureID = @paypalCaptureID
where id = @cashID";
conn.AddParam("@captureID", paypalCaptureID);
conn.ExecuteNonQuery();
}
}
internal void UpdateCash(int cashID, int PayPalTransactionInfoID)
{
using (OurCustomDbConnection conn = CreateConnection("UpdateCash"))
{
conn.CommandText = @"update Cash
set PaymentSourceID = @PayPalTransactionInfoID
where id = @cashID";
conn.AddParam("@PayPalTransactionInfoID", PayPalTransactionInfoID);
conn.ExecuteNonQuery();
}
}
所以我想嗯,也許更改這些名稱,以便它們現在是獨一無二的,並在某種程度上解釋了它的更新字段:
UpdateCashOrderID
UpdateCashTransactionInfoID
好吧,但那不是很好的名字。 而且我不能過於籠統,例如:
UpdateCashTransaction(int cashID, paypalTransactionID)
如果除了paypalTransactionInfoID之外,現金記錄還擁有不同類型的transactionID,該怎么辦? 例如creditCardInfoID? 那又怎樣? 交易不告訴我是什么樣的。 此外,如果您要更新2個字段,那么在cashID參數旁邊有2個參數:
UpdateCashTransaction(int cashID, paypalTransactionID, someOtherFieldIWantToUpdate)
看到我的沮喪? 處理這個的最好方法是我的老板不喜歡我的第一條路線?
為什么不呢:
UpdateCashPaymentSource(int cashID, int PayPalTransactionInfoID)
UpdateCashCapture(int cashID, int paypalCaptureID)
我的老板覺得每次更新一兩個字段創建一個對象都是過度的。
如果你每次都必須創建對象,他就是對的。 對此的正確回答是您應該已經在整個應用程序中使用這些業務對象。 您不創建新的Cash對象。 您將已經保存的Cash對象傳遞給它。
“UpdateCashWithCapture”和“UpdateCashWithTransaction”?
UpdateCashByTransactionInfoID
UpdateCashByCaptureID()
?
一種方法和一個枚舉會削減它嗎?
internal void UpdateCash(int cashID, int id, FieldName field)
{
using (OurCustomDbConnection conn = CreateConnection("UpdateCash"))
{
conn.CommandText = string.format("update Cash set {0} = @id where id = @cashID", field.ToString());
conn.AddParam("@id", id);
conn.AddParam("@cashId", cashId);
conn.ExecuteNonQuery();
}
}
public enum FieldName
{
PayPalCaptureId,
PayPalTransactionInfoID
}
編輯:
現在閱讀你的編輯,我同意你的原始方法將是我要去的方式 - 傳遞一個對象並更新數據庫中的所有相關字段,而不是傳入一個對象屬性值並更新它一個數據庫,最大的性能殺手將是打開數據庫連接,而不是與一個數據庫記錄相關的字段數。
UpdateCashByCaptureID
和UpdateCashByTransactionInfoID
怎么樣?
添加要更新的字段的名稱,即
internal void UpdateCash_paypalCaptureID(...)
internal void UpdateCash_PayPalTransactionInfoID(...)
您可以將更新查詢邏輯封裝在類中:
public abstract class CashUpdateQuery
{
public CashUpdateQuery(int cashId)
{
this.CashId = cashId;
}
protected int CashId { get; private set; }
public abstract void SetConnectionProperties(OurCustomDbConnection conn);
}
然后,您可以為每個更新方案提供特定的子類。 因此,對於您的PayPal查詢,您將擁有以下內容:
public PaypalTransactionCashUpdateQuery : CashUpdateQuery
{
private readonly int paypalCaptureId;
public PaypalTransationCashUpdateQuery(int cashId, int paypalCaptureId)
{
this.paypalCaptureId = paypalCaptureId;
}
public override void SetConnectionProperties(OurCustomDbConnection conn)
{
conn.CommandText = @"update Cash
set CaptureID = @paypalCaptureID
where id = @cashID";
conn.AddParam("@captureID", this.paypalCaptureId);
conn.AddParam("@cashID", this.CashId);
}
}
然后,您的update方法可以獲取查詢對象並使用它來設置連接上的查詢屬性並執行它:
internal void UpdateCash(CashUpdateQuery query)
{
using(OurCustomDbConnection conn = CreateConnection("UpdateCash"))
{
query.SetConnectionProperties(conn);
conn.ExecuteNonQuery();
}
}
這意味着添加新查詢只是添加CashUpdateQuery的新子類的情況。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.