Visual Basic Refactoring

0 dakikada yazıldı

15936 defa okundu

Düzenle

Bugün sizlere biraz Refactoring'den bahsetmek isriyorum.
Refactoring'i kaba bir şekilde tanımlamak gerekirse herhangi bir kodun
işlevini değiştirmeden yazılışı değiştirmek ve hedef olarak da kodun
okunuşu kolaylaştırmaktır diyebiliriz. Refactoring konusunda sektörde
bir çok araç, üçüncü parti uygulamalar satılıyor. Visual Studio
içerisinde de C# için hazır bazı ufak tefek Refactoring araçları
bulunuyor. Tabi ben bir VB programcısı olarak olayın VB kısmından
bahsedeceğim ve sizlere ücretsiz bir Visual Studio eklentisi olan
Refactor'u tavsiye edeceğim.

http://msdn2.microsoft.com/en-us/vbasic/bb693327.aspx

Yukarıdaki adresten indirebileceğiniz yazılımın normal sürümü ücretsiz
ve hem Visual Studio 2005 hem de 2008 ile uyumlu. Yazılımın daha çok
özelliklere sahip bir sürümü de "Refactor Pro" adı altında satılıyor.
Biz şimdilik ücretsiz sürümle yetinelim :)

Hemen bir iki örnek ile neler yapabileceğimize bakalım.

    Protected Sub Page_Load(ByVal sender As Object,
ByVal e As System.EventArgs) Handles Me.Load

        Dim ds As New
Data.DataSet

 

        Using cnn As New
SqlConnection(ConfigurationManager.ConnectionStrings("CNN").ConnectionString)

            Using cmd As New
SqlCommand("SELECT * from TABLO",
cnn)

                Dim da As New
SqlDataAdapter(cmd)

                da.Fill(ds)

            End Using

        End Using

 

        GridView1.DataSource = ds

        GridView1.DataBind()

    End Sub

Yukarıdaki kod herhangi bir asp.net web sayfasının Page.Load
durumunda çalışıyor olsun. Gördüğünüz gibi veritabanına bir Select
göndererek gelen veriyi GridView'e bağlıyoruz. Eğer Select ile
aldığımız veriyi sayfada başka yerlerde de almamız gerekecekse aslında
bunu harici bir function olarak yazmamız daha faydalı olacaktır.
Hemen aşağıdaki şekilde function içerisine almak istediğim bölümü
seçiyorum.

Kodumuzu harici bir function içerisinde alıyoruz.
Kodumuzu harici bir function içerisinde alıyoruz.

"Extract Method" komutu verdiğimizde Refactor bize kodu class
yapısı içerisinde nereye yazdırmak istediğimizi soruyor sonrasında da
Function'ımızı aşağıdaki gibi otomatik olarak yaratıyor.

Partial Class _Default

    Inherits System.Web.UI.Page

 

    Private Shared Sub
Page_LoadExtracted(ByVal ds As Data.DataSet)

        Using cnn As New
SqlConnection(ConfigurationManager.ConnectionStrings("CNN").ConnectionString)

            Using cmd As New
SqlCommand("SELECT * from TABLO",
cnn)

                Dim da As New
SqlDataAdapter(cmd)

                da.Fill(ds)

            End Using

        End Using

    End Sub

    Protected Sub Page_Load(ByVal sender As Object,
ByVal e As System.EventArgs) Handles Me.Load

        Dim ds As New
Data.DataSet

 

        Page_LoadExtracted(ds)

 

        GridView1.DataSource = ds

        GridView1.DataBind()

    End Sub

End Class

Gördüğünüz gibi artık aynı Function'ı kullanarak sürekli aynı datayı
istediğimizde bir DataSet içerisine doldurtabiliyoruz. Fakat burada
sizi rahatsız edeceğinden emin olduğum bir şey var; Refactor'un
yarattığı function'ın adı çok anlamsız :) Visual Studio içerisinde
yaratılan fonksiyonun adını değiştirirseniz Refactor sizin için söz
konusu fonksiyonun kullanıldığı yerlerdeki referansları da otomatik
olarak değiştirecektir.

Gelelim bir diğer örneğe. Varsayalım ki yeni bir sınıf yapısı
oluşturmaya başladınız. Oluşturduğunuz ilk sınıfın bir sürü Private
değişkeni var ve bunlara da uygun Property'lerin tanımlanması
gerekiyor. Set ve Get leri tek tek her biri için ayarlıyor olmak
gerçekten işkenceye dönüşebilir. Gelin aşağıdaki koda bir bakalım.

    Public Class Deneme

        Private Ozellik As Integer

        Private Ozellik2 As Integer

 

        Sub New()

 

        End Sub

 

        Sub New(ByVal
Ozellik As Integer, ByVal Ozellik2 As Integer)

            Me.Ozellik = Ozellik

            Me.Ozellik2 = Ozellik2

        End Sub

    End Class

Yukarıdaki sınıfımızda sadece iki adet özellik bulunuyor bunların
Property'lerini oluşturmamız gerekiyor. Private değişkenlerin
üzerine sağ tuşu ile tıkladıktan sonra "Refactor / Encapsulate
Field
" komutu veriyorum ve kodun yerleştirileceği yeri de seçtikten
sonra Refactor benim için Property kodlarını otomatik olarak
yazıyor.

  Public Class Deneme

        Private Ozellik As Integer

        Private Ozellik2 As Integer

 

        Sub New()

 

        End Sub

 

        Sub New(ByVal
Ozellik As Integer, ByVal Ozellik2 As Integer)

            Me.Ozellik1 = Ozellik

            Me.Ozellik21 = Ozellik2

        End Sub

        Public Property Ozellik1() As Integer

            Get

                Return Ozellik

            End Get

            Set(ByVal value As Integer)

                Ozellik = value

            End Set

        End Property

        Public Property Ozellik21() As Integer

            Get

                Return Ozellik2

            End Get

            Set(ByVal value As Integer)

                Ozellik2 = value

            End Set

        End Property

    End Class

Refactor tarafından tamamlanan yukarıdaki kodda dikkatinizi çektiyse
Sub New kodundaki değerlerin aktarıldığı değişkenlerin isimleri de
otomatik olarak Property isimleri ile değiştirilmiş durumda. Bir
önceki örnekte olduğu gibi burada da eğer elle Property isimlerini
değiştirirseniz Refactor otomatik olarak sınıf içerisinde diğer
referansları da değiştiriyor.

Tüm bu işlemleri kod yazarken yapıyor olmak kolaylık sağlayabilir fakat
esas mesele elinizde hazır kodları tamamlanmış bir proje varsa
gerçekleşiyor. Projeyi inceleyerek sadece Refactoring araçlarını
kullanarak daha okunabilir bir kod yaratmaya çalışıyorsunuz, hatta çoğu
zaman kodun işleyişini değiştirmeden kodu kısaltabiliyorsunuz bile.

Refactoring'e giriş yapmanızı sağlayacak Refactor eklentisi ne kadar
ücretsiz olsa da daha fazla reklamını yapmayacağım :) Refactoring
dünyasını keşfetmek artık size kalmış.

Hepinize kolay gelsin.