繁体   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