نمایش نتایج 1 تا 5 از 5

نام تاپیک: اعمالRefactoring درVS.NET 2005 و VS.NET 2008به صورت کامل

  1. #1

    Thumbs up اعمال Refactoring در VS.NET 2005 و VS.NET 2008به صورت کامل(با مثال های فراوان)


    Refactoring به معنای تغییر و نقل و انتقالات در کد با حفظ رفتار اصلی آن است،به بیانی دیگر تغییر در ساختار درونی یک نرم افزار جهت درک بهتر و تغییرات ساده تر آن،بدون تغییر در رفتار قابل مشاهده برنامه.
    پروسه Refactoring شامل حذف کد های تکراری ، ساده سازی منطق مشکل برنامه و شفاف سازی قسمت های مختلف برنامه است.
    جهت Refactoringمطمئن برنامه،باید آزمایشات دستی و یا خودکار جهت اطمینان حاصل شدن از صحت کارکرد نهایی برنامه صورت گیرد.

    همواره بهتر است کار Refactoring به صورت مداوم صورت گیرد تا اینکه در طی فازهای مختلف پروژه انجام گردد.

    انگیزه های موجود جهت انجام Refactoring:
    1)ساده تر شدن افزودن کدهای جدید به برنامه (توسعه سیستم)
    2)بهبود طراحی کدهای موجود
    3)طراحی واضح تر کد های موجود
    4)بالا بردن قابلیت نگهداری
    5)بهبود طراحی شیء گراو...
    در بسیاری از حالات،اعمالRefactoringبسیار ساده هستند.برای مثال تبدیل اعداد به سمبل های معادل.برای مثال کد زیر را در نظر بگیرید:

            class SimpleMath
    {
    public static double CalcCircumference(double diameter)
    { return 3.14 * diameter; }
    }

    پس از
    Refactoringو تبدیل اعداد به معادل های سمبلیک داریم:

            class SimpleMath
    {
    Public const double PI = 3.14;
    public static double CalcCircumference(double diameter)
    { return PI * diameter; }
    }

    دیدیم که بعد از اعمال Refactoringبهبودی های زیر را در برنا مه بوجود آورد:
    1)خوانایی کد افزایش یافت
    2)اگر نیاز به تغییر این مقدار عددی باشد تنها یک بار مقدار این ثابت تغییر نماید و نه اینکه در تمامی قسمت های برنامه که از این عدد استفاده می کنند،تغییرات را اعمال نماییم.
    خوشبختانه در اکثر IDE های خوب همانند VS.NET 2005 و بالاتر از ابزارهای Refactoring جزئی از محیط توسعه هستند.



    روش های Refactoringپشتیبانی شده در VS.NET 2005 و VS.NE 2008

    Extract Method : بر اساس انتخاب قسمتی از کد امکان ایجاد متد جدیدی از آن وجود خواهد داشت.
    Encapsulate Field :
    یک فیلد پابلیک را به فیلدی خصوصی کپسوله شده در یک خاصیت (property) دات نت تبدیل می کند.
    Extract Interface :
    بر اساس نوع های موجود،اینترفیس جدیدی را تعریف می کند.
    Reorder Parameters :
    روشی را جهت تغییر آرگومان ها،ارائه می دهد.
    :Remove Parameters
    پارامتری را از لیست پارامتر های موجود حذف می کند.
    Rename :
    امکان تغییر نام یک متد،متغیرو غیره را در سرار پروژه میسر می سازد.
    استخراج متد
    می توان با انتخاب قسمتی از یک کد طولانی، با استفاده از ابزارهای Refactoring محیط مجتمع توسعه،آن را تبدیل به متدی جدید نمود.
    به کد زیر دقت کنید:

                private void button2_Click(object sender, EventArgs e)
    {
    string strMess;
    strMess = this.button1.Text;
    MessageBox.Show(this.button1.Text);
    }

    اقدام به استخراج متد می کنیم.به صورت زیر:



    و سپس وارد کردن نام متد:



    بعد از اعمال Refactoringکد منتخب شما به یک متد به صورت زیرمی شود:

                private void button2_Click(object sender, EventArgs e)
    {
    MessageButtonShow();
    }

    private void MessageButtonShow()
    {
    string strMess;
    strMess = this.button1.Text;
    MessageBox.Show(strMess);
    }

    کپسوله کردن یک فیلد
    اتفاق نظر عملا بر آن است که استعمال فیلد داده ای پابلیک بسیار غلط است.بنابراین با تبدیل آنها به نوع های خصوصی،دسترسی کنترل شده ای را به اعضای کلاس می توان پدید آورد.
    فرض کنید کد زیر،توسط برنامه نویس تازه کاری مثل بنده تهیه شده است:

                public struct MyPoint
    {
    public int x;
    public int y;


    public void SetLocation()
    {
    Console.Write("Enter X position : ");
    x = int.Parse(Console.ReadLine());
    Console.Write("Enter Y position : ");
    y = int.Parse(Console.ReadLine());
    }
    public void PrintLocation()
    {
    Console.WriteLine("[(0),(1)]", x, y);
    }
    }

    جهت تبدیل فیلد های پابلیک ان به فیلد های خصوصی باید عملیات Refactoring به صورت زیر انجام گردد:
    1)تعریف مجدد مقادیر x و y به صورت خصوصی
    2)ایجاد خواص read/write برای هر یک از داده ها
    3)پیاده سازی خواص set و get به صورت کامل




    مطابق شکل فوق فیلد x را انتخاب کرده و سپس با کلیک راست و انتخاب گزینه Encapsulate Field ،3 عملیات Refactoring بالا را براحتی انجام داد.پس از انتخاب گزینه مربوطه ، صفحه زیر نمایش داده می شود.



    نام آن Y تنظیم شده و تمامی ارجاعات به آن نیز به روز آورده خواهند شد.همچنین تمامی تغییرات انجام شده نیز در پنجره ای دیگر که به شکل زیر است نمایش داده خواهد شد.



    نتیجه تغییرات انجام شده به صورت زیر خواهد بود:

        
    public struct MyPoint
    {
    public int x;
    private int y;
    public int Y
    {
    get { return y; }
    set { y = value; }
    }
    public void SetLocation()
    {
    Console.Write("Enter X position : ");
    x = int.Parse(Console.ReadLine());
    Console.Write("Enter Y position : ");
    Y = int.Parse(Console.ReadLine());
    }
    public void PrintLocation()
    {
    Console.WriteLine("[(0),(1)]", x, Y);
    }
    }

    استخراج اینترفیس ها

    کار اینترفیس تعریف مجموعه ای از اعضای ابسترکت(خواص،متدهاورخداده )است که یک نوع خاص آنها پشتیبانی خواهد کرد.زیبایی اینترفیس ها زمانی مشخص می گردد که نوع هایی در سلسله مراتب مختلف،یک انترفیس مشابهی را پیاده سازی می کنند.همچنین اینترفیس ها امکان پلی مرفیسم را در سطح فضاهای نام،اسمبلی ها و غیره فراهم سازد.
    با استفاده از قابلیت Extract Interface Refactoring می توان مجموعه ای از اعضای یک کلاس را انتخاب و از آنها اینترفیس جدیدی را استخراج نمود.
    برای مثال کد زیر را در نظر بگیرید:

        
    //Assume you have referenced System.Drawing.dll
    //and update your 'using' directoryes
    //to make use of Rectangle and Color types.
    class TwoDShap
    {
    public void Draw()
    {/* Some Interesting code.*/}
    public Rectangle GetBoundingRect()
    {/* More Interesting code.*/}
    public Color GetArgb()
    {/* Even Interesting code.*/}
    }

    فرض کنید کلاس های دیگری در برنامه به نام های ThreeDShapeو Printer نیز به سه متد فوق نیاز دارند.اگر این سه متد در یک اینترفیس سفارشی قرار گیرند(برای مثال به نام IRender )می توان به پلی مرفیسم بر مبنای اینترفیس ها دست یافت.
    با انتخاب سه متد و سپس اعمال Extract Interface Refactoring از طریق منوی مربوطه،شکل ذیر ظاهر خواهد شد.



    نکته:همچنین می توان به جای انتخاب متد های مورد نظر می توان نام کلاس را نیز انتخاب کرده و سپس منوی از Refactoring کار مورد نظر را انجام داد، از این مورد می توان جهت انتخاب متد های قرار گرفته در نقاط مختلف یک فایل بسیار مفید است.
    پس از کلیک بر روی دکمه OK ،ابتدا فایل (کلاس) با نام IRender به صورت زیر ایجاد می گردد:

        using System;
    namespace WindowsApplication3
    {
    interface IRender
    {
    void Draw();
    System.Drawing.Color GetArgb();
    System.Drawing.Rectangle GetBoundingRect();
    }
    }

    همچنین کد قبلی،به صورت زیر در حالتی که اینترفیس ایجاد شده را پیاده سازی می کند؛یغییر خواهد نمود:

        
    class TwoDShap : RefractoringExample.IRender

    تغییر ترتیب آرگومانها

    مثال زیر را در نطر بگیرید:

        
    //Assume you have referenced System.Drawing.dll
    //and update your 'using' directoryes
    //to make use of Rectangle
    class ImageRenderer
    {
    public void Render(Point TopLeft,Point bottomRight,Graphics g)
    {/* Interesting code.*/}
    public void Render(Graphics g,int x,int y)
    {/* Interesting code.*/}
    public void Render(Graphics g,Rectangle boundingBox)
    {/* Interesting code.*/}
    }

    از منوی Refactoringگزینه Reorder Parameters را انتخاب می کنیم:



    نحوه overloading توابع در این کلاس،باتوجه به محل قرارگیری آرگومان های آنها بسیار ناخوشایند است. می توان ترتیب آرگومان ها به سادگی را تغییرداد.به صورت زیر:



    بعد از تغییر ترتیب متغییر ها کد زیر حاصل می شود:

        
    class ImageRenderer
    {
    public void Render(Graphics g, Point TopLeft, Point bottomRight)
    {/* Interesting code.*/}
    public void Render(Graphics g,int x,int y)
    {/* Interesting code.*/}
    public void Render(Graphics g,Rectangle boundingBox)
    {/* Interesting code.*/}
    }


    حذف پارامتر ها

    این گزینه بسیار واضح است.برای مثال فرض کنید که از تابع Render (تابع در مثال قبل)می خواهیم پارامتر دوم را حذف نماییم.



    در ادامه لیستی از تغییراتی که در برنامه در اثر این تغییر اعمال خواهد شد نیز نمایش داده می شود.



    بعد حذف پارامتر bottomRight تابع قبلی به پارامتر زیر تبدیل می شود:

      

    class ImageRenderer
    {
    public void Render(Graphics g, Point TopLeft)
    {/* Interesting code.*/}
    public void Render(Graphics g,int x,int y)
    {/* Interesting code.*/}
    public void Render(Graphics g,Rectangle boundingBox)
    {/* Interesting code.*/}

    }


    تغییر نام یک متد ، فضای نام ، پارامترهاوغیره


    گزینه تغییر نام نیز بسیار واضح است.گاهی از اوقات جهت بالا بردن خوانایی برنامه نیاز می شود تا نامی در برنامه تغییر یابد.به وسیله ابزار Refactoring این کار به صورت خودکار،کاملا دقیق و بدون خطا در تمامی برنامه اعمال خواهد گردید.



    تبدیل متغیر به پارامتر های تابع


    فرض کنید پس از برنامه نویسی یک تابع به این نتیجه رسیده اید که اگر متغیری از آن تبدیل به آرگومان قابل استفادۀ توسط کلاینت ها گردد،بهتر است.برای مثال:

     


    private void button1_Click(object sender, EventArgs e)
    {
    MessgageText();
    }

    public static void MessgageText()
    {
    string mesText = "Hello World.";
    MessageBox.Show(mesText );
    }

    اکنون بهتر است mesText تبدیل به آرگومان ورودی این تابع گردد.برای این منظور مطابق شکل زیر عمل کرد.




    در این حالت خروجی کار به صورت زیر خواهد بود:

      

    private void button1_Click(object sender, EventArgs e)
    {
    MessgageText("Hello World.");
    }
    public static void MessgageText(string mesText)
    {
    MessageBox.Show(mesText);
    }





    امید است که این آموزش ها بتواند اندکی آگاهی ها و مهارت ها را در شما دانش پژوهان گرامی،افزایش داده باشد.
    منابع :
    کتاب آقای نصیری و اون ور این ور ...

    آخرین ویرایش به وسیله ali.aghdam : یک شنبه 18 بهمن 1388 در 16:38 عصر دلیل: اشکالات نحوی و دستوری

  2. #2

    نقل قول: اعمالRefactoring درVS.NET 2005 و VS.NET 2008به صورت کامل

    برای اطلاعات و مثال های بیشتر می توانید از کتاب های زیر استفاده کنید:

    آخرین ویرایش به وسیله ali.aghdam : چهارشنبه 30 دی 1388 در 13:46 عصر دلیل: مشکل در لینک ها

  3. #3

    نقل قول: اعمالRefactoring درVS.NET 2005 و VS.NET 2008به صورت کامل

    فکر کنم تصاویر مقاله رو آپلود نکردین اگه این کارو بکنین خیلی بهتر می شه (یا شاید رو سیستم من نشون نمیده )
    با تشکر از زحمات تمامی دوستان

  4. #4

    نقل قول: اعمالRefactoring درVS.NET 2005 و VS.NET 2008به صورت کامل

    نقل قول نوشته شده توسط rezatati مشاهده تاپیک
    فکر کنم تصاویر مقاله رو آپلود نکردین اگه این کارو بکنین خیلی بهتر می شه (یا شاید رو سیستم من نشون نمیده )
    با تشکر از زحمات تمامی دوستان
    نه فکر کنم مشکل از مرورگر شما باشد

    شما اگر با تصویر ها مشکل دارید می تونید انها را به صورت مستقیم از آدرس زیر مشاهده کنید

    http://p30bazan.persiangig.com/image/Refactoring

    دوستان در آینده ای نزدیک مطالب قبلی با مطالب بسیار جدید در مورد اعمالRefactoring در VS 2010 را به صورت PDF قرار خواهم داد
    با امید پیروزی و موفقیت برای همه عزیزان.


  5. #5

    Wink Refactoring with Microsoft Visual Studio 2010

    میخام یه کتاب معرفی کنم که به درد حرفه ای ها می خوره تا حرفه ای تر بشن!

    Refactoring with Microsoft Visual Studio 2010


    بله درست متوجه شدید Refactoring که هر برنامه نویس حرفه ای باید ازش پیروی کنه (اگر از Refactoring درکی ندارید به این + پست مراجعه کنید).

    این کتاب توسط Peter Richie نوشته شده که به حق میشه از ایشون به عنوان یک برنامه نویس و طراح زبان حرفه ای نام برد و توسط انتشارات Packt به چاپ رسیده است.

    فهرست مطالب به شرح زیر است :
    Chapter 1: Introduction to Refactoring

    Chapter 2: Improving Code Readability

    Chapter 3: Improving Code Maintainability

    Chapter 4: Improving Code Navigation

    Chapter 5: Improving Design Correctness

    Chapter 6: Improving Class Quality

    Chapter 7: Refactoring to Loosely Coupled

    Chapter 8: Refactoring to Layers

    Chapter 9: Improving Architectural Behavior

    Chapter 10: Improving Architectural Structure

    Chapter 11: Ensuring Quality with Unit Testing

    شما برای خرید کتاب می توانید از این + لینک استفاده کنید.
    برای آشنای با کتاب می تونید از قسمتی از کتاب که به صورت رایگان است استفاده کنید .

قوانین ایجاد تاپیک در تالار

  • شما نمی توانید تاپیک جدید ایجاد کنید
  • شما نمی توانید به تاپیک ها پاسخ دهید
  • شما نمی توانید ضمیمه ارسال کنید
  • شما نمی توانید پاسخ هایتان را ویرایش کنید
  •