ASP.NET
Network Akademi

Met Hostimg

“Bilgi paylaşıldıkça artar” sloganı ile .NET Platformuna ilişkin birikimlerin paylaşıldığı ASP.NET.TR Topluluğunda sizde “YAZAR” olmak için ; info@asp.net.tr e-mail adresine kendinizi anlatan bir e-mail göndererek başvuruda bulunabilirsiniz.

Visual Basic Refactoring

Daron YÖNDEM
VB.NET
10.03.2010 18:39:53
Hit : 6951

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.




BU İÇERİĞE YORUMDA BULUNUN


Bu MAKALE'ye yorum yapabilmek için Üye olmalısınız ...!


BU İÇERİĞE YAPILAN YORUMLAR