ग # कार्यों के लिए इंडेंटेशन

Nov 11 2020

मैं सिर्फ अपने वर्तमान कोड पर अपने इंडेंटेशन में सुधार करना चाहता हूं। मुझे कोई समीक्षा और सुधार सुनने में खुशी होगी।

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

जवाब

5 Dennis_E Nov 11 2020 at 20:22

दो स्थान हैं जहाँ मैं उपयोग करूँगा var:

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

अब आपको एक उपयोग ब्लॉक के चारों ओर ब्रेसिज़ लगाने की ज़रूरत है, जिससे आपको एक इंडेंटेशन स्तर की बचत होगी:

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

पहले पैरामीटर को लाइन के अंत में और बाकी को नई लाइन पर न रखें। पहला पैरामीटर नई लाइन पर भी डालें:

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

यदि आप एक नई पंक्ति पर क्वेरी स्ट्रिंग शुरू करते हैं, तो आप इसे एक इंडेंटेशन स्तर पर वापस ले जा सकते हैं:

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

डेनिस_ई के पास कुछ अच्छी सलाह है, लेकिन दो आइटम हैं जो मैं अलग तरीके से करूंगा।

  1. SQL इंसर्ट स्टेटमेंट जैसा है ठीक है। कोड ठीक पढ़ता है, लेकिन मैं बयान को संग्रहीत करने के लिए कक्षा में एक निजी स्थिरांक घोषित करूंगा।

  2. अपनी तर्जनी के लिए घुंघराले ब्रेसिज़ को अपनी तर्ज पर रखें:

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

इंडेंटेशन से संबंधित कुछ अतिरिक्त अवलोकन:

  • अग्रणी अंडरस्कोर के साथ पास्कलकेस के बजाय कैमलकेस को अपने मापदंडों का नाम दें। C # में मुहावरेदार नामकरण सम्मेलन के quantityInvolvedबजाय होगा _QuantityInvolved

    यह महत्वहीन लग सकता है, लेकिन शिफ्ट कुंजी और / या अंडरस्कोर कुंजी तक पहुंचने से आपकी टाइपिंग की गति धीमी हो जाती है। यह "एक हजार पेपर की कटौती से मौत है।" गति में एक छोटी सी कमी से ही कोई फर्क नहीं पड़ता। गुणा करें कि प्रत्येक दिन सैकड़ों बार आप कोड टाइप करते समय ऐसा करते हैं और यह जुड़ जाता है।

BCdotWEB Nov 13 2020 at 14:54

आपके पास चौदह मापदंडों वाली एक विधि है, यह तरीका बहुत अधिक है। इन मापदंडों के नाम भी आमतौर पर C # में उपयोग किए गए एक का पालन नहीं करते हैं: ऊंटनी, और कोई अंडरस्कोर उपसर्ग नहीं।

क्यों नहीं एक निर्माण ComplaintModelऔर पारित करने के लिए InsertComplaint()?


DataAccessIMHO एक बहुत ही सामान्य नाम है। आप इसे दर्जनों तरीकों से भरने के लिए लुभाएंगे, अपने सभी डेटाबेस लॉजिक को केंद्रीकृत करते हुए, और यह बस असहनीय हो जाएगा। उदाहरण के लिए एक "ComplaintsService" होने पर विचार करें जहाँ आपके पास बस शिकायतों से संबंधित विधियाँ हैं, या यहाँ तक कि पूर्ण CQRS जाएँ ।


नामों को संक्षिप्त न करें। मैं conn(हालांकि मैं पसंद करूंगा mySqlConnection) के साथ रह सकता हूं , लेकिन ConnStringव्यर्थ है। मुझे लगता है कि नाम के वर्ग के साथ मुद्दों से बचने के लिए आपने ऐसा किया है ConnectionString, लेकिन फिर आपको उस वर्ग का नाम बदलना चाहिए।


चीजों को उचित नाम दें: List<ComplaintModel> complaintगलत है क्योंकि यह वस्तुतः शिकायतों की एक सूची है, और इस प्रकार इसे बुलाया जाना चाहिए complaints


जब मैं लंबा हो जाता है तो मैं इनलाइन SQL का प्रशंसक नहीं हूं। मैं .SQL स्क्रिप्ट्स को एम्बेड करने का प्रशंसक हूं और फिर एक QueryRetriever का उपयोग करके उन्हें पढ़ रहा हूं । फायदा यह है कि ऐसी .SQL स्क्रिप्ट विजुअल स्टूडियो में कलर-कोडेड भी हो जाती है (हालांकि मैं चाहता हूं कि क्वेरी के प्रकार, उदाहरण के लिए SQL सर्वर बनाम MySql बनाम Oracle आदि) के आधार पर अलग-अलग एक्सटेंशन होने का एक तरीका था।