القائمة الرئيسية

الصفحات

اهم 10 ملاحظات لكتابه كود نظيف في لغه سي شارب الجزء 2



 استخدم دائما اسلوب تغليف الشروط والقواعد الشرطية

التغليف هو طريقه تساعد فى عزل التنفيذ عن السلوك الذى يتعرض له عناصر كلاس اخر

اسلوب خاطئ


 if (website.state == "down")
 {
    // ...
 }
        

اسلوب صحيح


 if (website.IsDown())
 {
    // ...
 }
        


كذلك يسمح التغليف بتحكم اكبر فى اقتران الكود المكتوب


لا تجعل العناصر والمتغيرات دائما معلن عنها للكلاسات الاخرى

وفعل ذلك يجعل العناصر الغير محمية معرضين للتعديل عن طريق الخطأ ولالذى يمكن ان يتسبب فى اخطاء فى الكود البرمجى

اسلوب خاطئ


 class Car
 {
    public string Brand { get; set; }

    public Car(string brand)
    {
        Brand = brand;
    }
 }

 var car = new Car("Porsche");
 Console.WriteLine(car.Brand); // Car brand: Porsche
        

اسلوب صحيح


 class Car
 {
    public string Brand { get; }

    public Car(string brand)
    {
        Brand = brand;
    }
 

 var car = new Car("Porsche");
 Console.WriteLine(car.Brand); // Car brand: Porsche
        

وعلينا ان نضع فى الاعتبار اننا مسئولين عن الأذونات التى نعطيها للكود بمعنى انه اذا كان لديك متغير نصي للقراءة فقط وانت سمحت بالتعديل عليه فأنت المسئول اذا حدث خطأ


تعلم كيف يمكنك استخدام get- set

فى بعض الاوقات لا نستخدم public ,private, protected وهذا يمنعنا من التحكم بشكل أفضل فى تعديل خصائص الكائن او الكلاس

اسلوب خاطئ


 class BankAccount
 {
    public double Balance = 5000;
 }

 var bankAccount = new BankAccount();

 // Buy a cappuccino 
 bankAccount.Balance -= 15;
        

اسلوب صحيح


 class BankAccount
 {
    private double _balance = 0.0D;

    public double Balance {
        get {
            return _balance;
        }
    }

    public BankAccount(balance = 1000)
    {
       _balance = balance;
    }

    public void WithdrawBalance(int amount)
    {
        if (amount > _balance)
        {
            throw new Exception('Amount greater than available balance.');
        }

        _balance -= amount;
    }

    public void DepositBalance(int amount)
    {
        _balance += amount;
    }
 }

 var bankAccount = new BankAccount();
 
 // Buy a cappuccino 
 bankAccount.WithdrawBalance(price: 15);

 balance = bankAccount.Balance;
        

وعندما نريد ان نورث تلاك الفئه  او الكلاس فأنه بشكل افتراضى يوجد امكانية لتجاوز تلك الوظيقة وهناك احتمالات كتير لذلك


التكوين افضل من التوريث

فىلا كثير من المواضع اثناء البرمجه كثير منا لا يعرف ان الثوريث ليس الحل الافضل ولكن هل سالت نفسك ايهما افضل, دعنى اخبرك ان التكوين افضل ولمعرفة ذلك دعنا نرى هذا المثال 

اسلوب خاطئ


 class Car
 {
    private string Model { get; set; }
    private string Brand { get; set; }

    public Car(string model, string brand)
    {
        Model = model;
        Brand = brand;
    }

    // ...
 }

 // Bad because Car "have" engine data.
 // CarEngineData is not a type of Car

 class CarEngineData : Car
 {
   private string Model { get; set; }
   private string Brand { get; set; }

   public CarEngineData(string model, string brand, string displacement, string horses)
    {
         // ...
    }

    // ...
 }
        

اسلوب صحيح


 class CarEngineData
 {
    public string Displacement { get; }
    public string Horses { get; }

    public EmployeeTaxData(string displacement, string horses)
    {
        Displacement = displacement;
        Horses = horses;
    }

    // ...
 }
 
 class Car
 {
    public string Model { get; }
    public string Brand { get; }
    public CarEngineData EngineData { get; }

    public Car(string model, string brand)
    {
        Model = model;
        Brand = brand;
    }

    public void SetEngine(string displacement, double horses)
    {
        EngineData = new CarEngineData(displacement, horses);
    }

    // ...
 }
        

ومن المثال السابق نجد أن 

العلاقة <<هى>> (الانسان- الحيوان)

العلاقة <<لديها>> (تفاصيل المستخدم- المستخدم)


حدد معاملات الدوال قبل ارسالها 

من المهم جدا تحديد عدد البارامترات التى تمتلكها الدالة لانه كلما كان ذلك ابسط كان احسن . والدالة التى لديها اكتر من 3 بارامتر تكون صعبة فى التعامل معا وفهمها بل ويمكن ارسال بارامتر مكان اخر
لذلك فإن افضل اختيار هو ان تكون الدالة بـ 1 أو 2 بارامتر . هلى تريد ان تضع المزيد ؟ لنرى فى هذا المثال الطريقة

اسلوب خاطئ

 public void ProtectApplication(string path, string configurationPath, string outPutPath, CancellationToken cancellationToken)
 {
    // ...
 }
        
اسلوب صحيح

 public class ProtectionConfig
 {
    public string Path { get; set; }
    public string ConfigurationPath { get; set; }
    public string OutPutPath { get; set; }
    public CancellationToken cancellationToken { get; set; }
 }

 var config = new ProtectionConfig
 {
    Path = "./app.exe",
    ConfigurationPath = "./shield.config.json",
    OutPutPath = "./app_protected.exe",
    CancellationToken = source.Token;
 };

 public void ProtectApplication(ProtectionConfig config)
 {
    // ...
 }
        

واذا كان لديك دالة تحتوى على اكثر من 3 بارامتر فهذا يعنى ان الدالة تقوم بوظائف كثيرة جدا.


لقد قدمنا بعض النصائح البسيطة جدا لكتابة كود نظيف . مع العلم انه يوجد طرق لا نهائية لتحسين جودة الكود والتى لن تمتلك هذة المهارة إلا بالاطلاع عليها والتأكد انك تراعى هذة التحسينات فى الكود الذى تكتبة. وسوف نسرد فى المقالات القادمة حيل اخرى وبعض النصائح لتحسين جودة الكود

تعليقات