簡體   English   中英

如何命名具有相同簽名的2種方法

[英]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
}

編輯:

現在閱讀你的編輯,我同意你的原始方法將是我要去的方式 - 傳遞一個對象並更新數據庫中的所有相關字段,而不是傳入一個對象屬性值並更新它一個數據庫,最大的性能殺手將是打開數據庫連接,而不是與一個數據庫記錄相關的字段數。

UpdateCashByCaptureIDUpdateCashByTransactionInfoID怎么樣?

添加要更新的字段的名稱,即

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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM