Rientro per le funzioni c #

Nov 11 2020

Sto solo cercando di migliorare il mio rientro sul mio codice attuale. Sarei felice di ricevere recensioni e miglioramenti.

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);
        }
    }
}

Risposte

5 Dennis_E Nov 11 2020 at 20:22

Ci sono due posti dove userei var:

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

Non è più necessario inserire parentesi graffe attorno a un blocco using, risparmiando un livello di rientro:

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

Non mettere il primo parametro alla fine della riga e il resto su una nuova riga. Metti anche il primo parametro su una nuova riga:

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

Se inizi la stringa Query su una nuova riga, puoi spostarla indietro di un livello di rientro:

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

Dennis_E ha dei buoni consigli, ma ci sono due cose che farei diversamente.

  1. L'istruzione SQL insert sembra a posto così com'è. Il codice si legge bene, ma dichiarerei una costante privata nella classe per memorizzare l'istruzione.

  2. Metti anche le parentesi graffe per l'inizializzatore di oggetti sulle loro linee:

    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
    });
    

Alcune osservazioni aggiuntive non correlate all'indentazione:

  • Rinomina i tuoi parametri in camelCase invece di PascalCase con trattini bassi iniziali. La convenzione di denominazione idiomatica in C # sarebbe quantityInvolvedinvece di _QuantityInvolved.

    Potrebbe sembrare insignificante, ma raggiungere il tasto Maiusc e / o il tasto di sottolineatura rallenta la velocità di digitazione. È "la morte per mille tagli di carta". Una piccola diminuzione della velocità di per sé non ha importanza. Moltiplicalo per centinaia di volte ogni giorno durante la digitazione del codice e si somma.

BCdotWEB Nov 13 2020 at 14:54

Hai un metodo con quattordici parametri, questo è davvero troppi. Inoltre, i nomi di questi parametri non seguono quello solitamente utilizzato in C #: camelCased e nessun prefisso di sottolineatura.

Perché non costruire un ComplaintModele passarlo a InsertComplaint()?


DataAccessè IMHO un nome troppo generico. Sarai tentato di riempirlo con dozzine di metodi, centralizzando lì tutta la logica del tuo database e diventerà ingestibile. Considera l' idea di avere un "Servizio reclami", ad esempio, in cui hai solo i metodi relativi ai reclami, o persino il CQRS completo .


Non abbreviare inutilmente i nomi. Posso conviverci conn(anche se preferirei mySqlConnection), ma ConnStringè inutile. Capisco che hai fatto questo per evitare problemi con la classe denominata ConnectionString, ma poi dovresti cambiare il nome di quella classe.


Dare alle cose nomi propri: List<ComplaintModel> complaintè sbagliato perché è letteralmente un elenco di reclami, e quindi dovrebbe essere chiamato complaints.


Non sono un fan di SQL in linea quando diventa lungo. Sono un fan dell'incorporamento di script .SQL e poi leggerli usando un QueryRetriever . Il vantaggio è che tali script .SQL diventano anche codificati a colori in Visual Studio (anche se vorrei che ci fosse un modo per avere estensioni diverse in base al tipo di query, ad es. SQL Server vs MySql vs Oracle ecc.).