Recuo para funções c #

Nov 11 2020

Estou apenas procurando melhorar minha indentação no meu código atual. Eu ficaria feliz em ouvir quaisquer comentários e melhorias.

public class DataAccess
{

    public List<ComplaintModel> GetComplaint(string _OrderNumber)
    {
        throw new NotImplementedException();
    }

    public void InsertComplaint(
        DateTime _Date,
        string _OrderNumber,
        string _CustomerName,
        string _CustomerContactName,
        string _Telephone,
        string _Email,
        string _CustomerReference,
        string _Product,
        string _PackSize,
        string _BatchNumber,
        DateTime _BestBeforeDate,
        string _QuantityInvolved,
        string _Details, 
        string _Comments)
    {
        using(MySqlConnection conn = new MySqlConnection(ConnectionString.ConnString))
        {
            List<ComplaintModel> complaint = new List<ComplaintModel>();

            complaint.Add(new ComplaintModel { Date = _Date,
                OrderNumber = _OrderNumber,
                CustomerName = _CustomerName,
                CustomerContactName = _CustomerContactName,
                Telephone = _Telephone,
                Email = _Email,
                CustomerReference = _CustomerReference,
                Product = _Product,
                PackSize = _PackSize,
                BatchNumber = _BatchNumber,
                BestBeforeDate = _BestBeforeDate,
                QuantityInvolved = _QuantityInvolved,
                Details = _Details,
                Comments = _Comments});

            conn.Execute(@"INSERT INTO customer_complaints 
                        (date_taken, order_number, customer_name, customer_contact, telephone, email, customer_reference, product, pack_size, batch_lot_number,
                        best_before_date, quantity_involved, details, comments) 
                        VALUES (@Date, @OrderNumber, @CustomerName, @CustomerContactName, @Telephone, @Email, @CustomerReference, @Product, @PackSize, @BatchNumber,
                        @BestBeforeDate, @QuantityInvolved, @Details, @Comments)", complaint);
        }
    }
}

Respostas

5 Dennis_E Nov 11 2020 at 20:22

Existem dois lugares onde eu usaria var:

var conn = new MySqlConnection(ConnectionString.ConnString)
var complaint = new List<ComplaintModel>();

Você não precisa mais colocar colchetes em torno de um bloco de uso, economizando um nível de recuo:

using var conn = new MySqlConnection(ConnectionString.ConnString);

Não coloque o primeiro parâmetro no final da linha e o resto em uma nova linha. Coloque o primeiro parâmetro em uma nova linha também:

complaint.Add(new ComplaintModel {
    Date = _Date,
    ...

Se você iniciar a string de consulta em uma nova linha, poderá retroceder um nível de indentação:

conn.Execute(
    @"INSERT INTO customer_complaints
    ...
3 GregBurghardt Nov 11 2020 at 21:44

Dennis_E tem alguns bons conselhos, mas há dois itens que eu faria de forma diferente.

  1. A instrução de inserção do SQL parece bem como está. O código é lido muito bem, mas eu declararia uma constante privada na classe para armazenar a instrução.

  2. Coloque as chaves para o inicializador de objetos em suas próprias linhas também:

    complaint.Add(new ComplaintModel     
    {
        Date = _Date,
        OrderNumber = _OrderNumber,
        CustomerName = _CustomerName,
        CustomerContactName = _CustomerContactName,
        Telephone = _Telephone,
        Email = _Email,
        CustomerReference = _CustomerReference,
        Product = _Product,
        PackSize = _PackSize,
        BatchNumber = _BatchNumber,
        BestBeforeDate = _BestBeforeDate,
        QuantityInvolved = _QuantityInvolved,
        Details = _Details,
        Comments = _Comments
    });
    

Algumas observações adicionais não relacionadas à indentação:

  • Renomeie seus parâmetros para camelCase em vez de PascalCase com sublinhados à esquerda. A convenção de nomenclatura idiomática em C # seria em quantityInvolvedvez de _QuantityInvolved.

    Pode soar insignificante, mas alcançar a tecla shift e / ou sublinhado diminui a velocidade de digitação. É "morte por mil cortes de papel". Uma pequena diminuição na velocidade por si só não importa. Multiplique isso pelas centenas de vezes por dia em que você faz isso enquanto digita o código e tudo aumenta.

BCdotWEB Nov 13 2020 at 14:54

Você tem um método com quatorze parâmetros, isso é demais. Os nomes desses parâmetros também não seguem o normalmente usado em C #: camelCased e nenhum prefixo de sublinhado.

Por que não construir um ComplaintModele passá-lo para InsertComplaint()?


DataAccessé IMHO um nome genérico demais. Você ficará tentado a preencher isso com dezenas de métodos, centralizando toda a lógica do seu banco de dados ali, e isso se tornará impossível de gerenciar. Considere ter um "Serviço de Reclamações", por exemplo, onde você apenas tem os métodos relacionados a reclamações, ou até mesmo vai CQRS completo .


Não abrevie nomes inutilmente. Posso viver com conn(embora eu prefira mySqlConnection), mas ConnStringé inútil. Eu entendi que você fez isso para evitar problemas com a classe nomeada ConnectionString, mas você deve alterar o nome dessa classe.


Dê nomes próprios às coisas: List<ComplaintModel> complaintestá errado porque é literalmente uma lista de reclamações e, portanto, deve ser chamada complaints.


Não sou fã de SQL embutido quando ele se torna demorado. Sou fã de incorporar scripts .SQL e, em seguida, lê-los usando um QueryRetriever . A vantagem é que esses scripts .SQL também são codificados por cores no Visual Studio (embora eu desejasse que houvesse uma maneira de ter extensões diferentes com base no tipo de consulta, por exemplo, SQL Server vs. MySql vs. Oracle etc.).