Property Builder

Posted by Kamarudin • 3 minute read • Comments

Apapun bahasanya klo lagi ngoding di dot NET, biasanya enggak bakalan jauh-jauh dari aktivitas pembuatan kelas.

Kita ambil contoh pembuatan kelas sederhana yang hanya mempunyai 2 property (id dan keterangan), hasil kodenya (Visual Basic .NET) akan terlihat seperti berikut :

Public Class Pekerjaan

    Private mPekerjaanID As Short ' deklarasi instance variable
    Public Property PekerjaanID() As Short
        Get
            Return mPekerjaanID ' mengembalikan id pekerjaan
        End Get

        Set(ByVal value As Short)
            mPekerjaanID = value ' mengeset id pekerjaan
        End Set
    End Property

    Private mKeterangan As String ' deklarasi instace variabel
    Public Property Keterangan() As String
        Get
            Return mKeterangan ' mengembalikan nama pekerjaan
        End Get

        Set(ByVal value As String)
            mKeterangan = value ' mengeset nilai pekerjaan
        End Set
    End Property

End Class

Jadi untuk membuat sebuah property kita hanya membutuhkan instance variabel dan blok property seperti terlihat pada kode diatas, sederhana bukan ? :).

Tapi membuat property kelas akan sedikit menakutkan :grin: jika yang kita ambil contohnya adalah kelas Mahasiswa, biasanya kelas Mahasiswa mempunyai puluhan property bahkan nyampe ratusan (swear saya pernah melihatnya loh :lol:).

Jadi gimana solusinya ? Klo kita punya waktu luang mungkin bisa coba googling trus mencoba satu per satu plugin property builder yang ada.

Atau solusi yang lain kita buat sendiri, gampang kok :). Untuk desainnya yang sederhana aja seperti gambar berikut :

jangan lupa diatur juga properties Tab Ordernya

kita mulai dulu dengan kode tombol Add

Private Sub btnAdd_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnAdd.Click
        Const TEMPLATE_READ_ONLY As String = "Private m<name> As <type>" & vbCrLf & _
                                             "Public ReadOnly Property <name>() As <type>" & vbCrLf & _
                                             "    Get" & vbCrLf & _
                                             "        Return m<name>" & vbCrLf & _
                                             "    End Get" & vbCrLf & _
                                             "End Property" & vbCrLf

        Const TEMPLATE_WRITE_ONLY As String = "Private m<name> As <type>" & vbCrLf & _
                                              "Public WriteOnly Property <name>() As <type>" & vbCrLf & _
                                              "    Set(ByVal value AS <type>)" & vbCrLf & _
                                              "        m<name> = value" & vbCrLf & _
                                              "    End Set" & vbCrLf & _
                                              "End Property" & vbCrLf

        Const TEMPLATE_BOTH As String = "Private m<name> As <type>" & vbCrLf & _
                                        "Public Property <name>() As <type>" & vbCrLf & _
                                        "    Get" & vbCrLf & _
                                        "        Return m<name>" & vbCrLf & _
                                        "    End Get" & vbCrLf & vbCrLf & _
                                        "    Set(ByVal value AS <type>)" & vbCrLf & _
                                        "        m<name> = value" & vbCrLf & _
                                        "    End Set" & vbCrLf & _
                                        "End Property" & vbCrLf

        Dim result As String = String.Empty

        If rdoReadOnly.Checked Then
            result = TEMPLATE_READ_ONLY

        ElseIf rdoWriteOnly.Checked Then
            result = TEMPLATE_WRITE_ONLY

        Else
            result = TEMPLATE_BOTH
        End If

        result = result.Replace("<name>", txtPropertyName.Text)
        result = result.Replace("<type>", Strings.StrConv(txtPropertyType.Text, VbStrConv.ProperCase))

        mProperties.Add(result & vbCrLf)
        ListBox1.Items.Add(txtPropertyName.Text & " -> " & txtPropertyType.Text)

        txtPropertyName.Clear()
        txtPropertyName.Focus()

    End Sub

Pada kode diatas terlihat variabel mProperties yang saya deklarsikan menggunakan perintah berikut :

Private mProperties As New System.Collections.ArrayList

Jadi variabel mProperties bisa digunakan untuk menampung data lebih dari satu (array) dalam hal ini adalah instance variabel + blok property.

Kode berikutnya adalah tombol Copy :

Private Sub btnCopy_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnCopy.Click
        Dim result As String = String.Empty

        If mProperties.Count = 0 Then
            MessageBox.Show("Belum ada property yang diinputkan !", "Peringatan", MessageBoxButtons.OK, MessageBoxIcon.Exclamation)
            Return
        End If

        For Each itm As String In mProperties
            result += itm
        Next

        Clipboard.Clear()
        Clipboard.SetText(result) ' copy ke memory

        mProperties.Clear()
        txtPropertyType.Clear()
        ListBox1.Items.Clear()

        MessageBox.Show("Property berhasil di generate, selanjutnya tinggal copas ke editor code Anda", "Info", MessageBoxButtons.OK, MessageBoxIcon.Information)
    End Sub

Intinya kode diatas mengcopy data yang ada di variabel mProperties ke Clipboard.

Setelah itu coba jalankan programnya kemudian coba diinputkan nama Property berikut tipe datanya.

Klik tombol Copy selanjutnya copas ke editor code Anda.

Public Class Mahasiswa

    Private mNpm As String
    Public Property Npm() As String
        Get
            Return mNpm
        End Get

        Set(ByVal value As String)
            mNpm = value
        End Set
    End Property

    Private mNama As String
    Public Property Nama() As String
        Get
            Return mNama
        End Get

        Set(ByVal value As String)
            mNama = value
        End Set
    End Property

    Private mTempatLahir As String
    Public Property TempatLahir() As String
        Get
            Return mTempatLahir
        End Get

        Set(ByVal value As String)
            mTempatLahir = value
        End Set
    End Property

    Private mTanggalLahir As Date
    Public Property TanggalLahir() As Date
        Get
            Return mTanggalLahir
        End Get

        Set(ByVal value As Date)
            mTanggalLahir = value
        End Set
    End Property

    Private mAlamat As String
    Public Property Alamat() As String
        Get
            Return mAlamat
        End Get

        Set(ByVal value As String)
            mAlamat = value
        End Set
    End Property

End Class

Dan… postingan kali ini pun selesai.

Selamat MENCOBA :blush:

Referensi : 

Comments