"Jangan pernah menunda sampai waktu berjalan apa yang bisa dilakukan pada waktu kompilasi."
David Gries, Konstruksi Kompiler untuk Komputer Digital
Pendahuluan
Sebagai programmer, ketika kita mempelajari beberapa teknologi baru, contoh terkadang bisa menjadi musuh terbesar kita. Pedoman sering kali dirancang agar sederhana dan mudah dipahami, namun pada saat yang sama dapat menyebabkan peningkatan penulisan kode yang malas, tidak efisien, dan bahkan berbahaya. Situasi paling umum seperti ini terjadi pada paradigma ADO.NET. Pada artikel ini, kita akan melihat apa artinya memiliki objek yang diketik dengan kuat di database, sehingga memungkinkan Anda melakukannya di program Anda, meskipun contohnya kurang.
Sedikit lebih spesifik, kita akan melihat seberapa kuat kumpulan data yang diketik dibuat dan digunakan di Visual Studio 2005. Saat artikel ini membahas, kumpulan data yang diketik dengan kuat menawarkan banyak keuntungan dibandingkan teknik akses data yang diketik dengan lemah. Kita juga akan melihat di sini bahwa membuat dan menggunakan kumpulan data yang diketik dengan kuat tidak menjadi lebih mudah dengan Visual Studio 2005. Jika Anda ingin mempelajari lebih lanjut, teruslah membaca.
Dasar-dasar dan Manfaat Objek yang Diketik dengan Kuat
Untuk memahami apa yang dimaksud dengan pengetikan yang kuat, pertama-tama Anda bisa memikirkan tentang berkencan. Jika kamu lajang, tipe orang seperti apa yang ingin kamu kencani? Anda mungkin memiliki kriteria tertentu (seperti menjadi sehat dan menarik), atau kriteria tersebut mungkin sederhana atau tidak jelas. Tidak peduli bagaimana kondisi Anda, ketika Anda memutuskan dengan siapa Anda akan menghabiskan lebih banyak waktu, Anda akan selalu menggunakan standar tertentu Anda sendiri untuk mempertimbangkan dan mempertimbangkan tipe-tipe ini. Jika Anda pintar, Anda akan banyak berpikir untuk melindungi diri dari trauma emosional. Anda mungkin mendapati bahwa, misalnya, bersama seorang pecandu alkohol tidaklah stabil kecuali keduanya berada dalam hubungan yang serius. Namun, hal itu menyakitkan dan sangat sulit membuat seseorang berubah. Oleh karena itu, kebijaksanaan Anda akan menginstruksikan Anda untuk menghentikan hubungan bahkan sebelum dimulai. Menambahkan klausul larangan minum ke dalam kriteria kencan Anda akan melindungi Anda dari sakit hati di masa depan dan memungkinkan Anda memfokuskan waktu dan energi pada kandidat yang lebih baik.
Anda mungkin terkejut bagaimana alasan ini ada hubungannya dengan pemrograman. Tidak masalah, ikutlah dengan saya, pembaca yang budiman! Objek akses data ADO.NET dirancang agar sangat fleksibel. Saat Anda membaca data dari database, Anda mungkin bekerja dengan banyak tipe objek umum yang diizinkan oleh kerangka .NET normal, kecuali Anda mengalami masalah khusus. Dengan menerapkan teori penanggalan kami, pada dasarnya Anda dapat menganggap data relevan Anda sebagai objek universal. "Selama teman kencanku tidak terlalu merepotkan." Tidak ada batasan meskipun itu manusia atau makhluk hidup lainnya! Sebagai teman Anda, saya mohon, "Lebih banyak standar! Buat daftar Anda lebih kecil!"
Sama seperti mengabaikan siapa yang Anda kencani dapat menyebabkan masalah hubungan di masa depan, membiarkan objek Anda tidak dicentang dalam kode Anda juga dapat menyebabkan kesalahan. Selain itu, jika Anda membiarkan objek lama berkeliaran di subrutin Anda, Anda mungkin tidak menyadari bahwa ini adalah masalah sampai program berjalan. Menggunakan teori kencan kami, menemukan kesalahan pada saat runtime adalah seperti mengajak teman kencan Anda bertengkar menyakitkan dan canggung di tengah restoran Italia yang trendi. Ya, Anda tahu, jika Anda telah membuat rencana sebelumnya, Anda tidak akan berakhir dengan sekelompok pengunjung yang melihat Anda, dan itu tidak akan memalukan. Dengan hanya menerapkan beberapa standar yang lebih ketat pada kode Anda, Anda dapat menemukan kesalahan sebelum program Anda mulai dikompilasi. Misalnya contoh kode berikut:
string FirstName = myrow.("FirstName").ToString();
DataRow dalam contoh ini tidak diketik, dan sebagai hasilnya, Anda harus menggunakan nama kolom sebagai string untuk mendapatkan nilai yang Anda perlukan (atau Anda dapat memilih untuk menggunakan indeks kolom dalam kumpulan kolom rekaman). Untungnya kolom itu memang ada. Tipe data kolom DataRow adalah objek. Kita berasumsi bahwa tipe data di bawah kolom FirstName adalah string, dan kita harus secara eksplisit mengonversinya menjadi string sebelum menggunakannya. Jika nama kolom ini berubah (misalnya, menjadi PersonFirstName), kompiler tidak dapat memberi tahu Anda. Tertekan? Tapi Anda tidak perlu melakukannya. Jika kode Anda terlihat seperti berikut, hidup Anda akan lebih sederhana dan kode Anda akan lebih dapat diandalkan.
string FirstName = PersonRow.FirstName
dalam contoh kedua ini, kita menggunakan baris yang diketik dengan kuat, dan kita tahu bahwa properti FirstName bertipe string. Tidak ada nama kolom yang berantakan, tidak ada konversi jenis yang berantakan. Kompiler telah melakukan pengecekan tipe untuk kita, dan kita dapat melakukan pekerjaan lain dengan aman tanpa khawatir apakah kita telah mengetikkan nama kolom dengan benar.
Segala sesuatu yang lain sama, jadi Anda tidak akan ragu untuk menggunakan ini daripada tipe generik. Tapi tunggu dulu, dari mana asal objek yang diketik dengan kuat? Saya juga berharap saya dapat memberi tahu Anda bahwa objek-objek ini dibuat secara otomatis. Namun sama seperti hubungan baik yang membutuhkan waktu dan usaha, membuat objek Anda bertipe kuat juga membutuhkan usaha ekstra. Namun waktu ekstra yang dihabiskan di sini pasti sepadan, dan ini menghemat lebih banyak waktu yang dihabiskan untuk "menangkap bug" secara eksponensial di masa mendatang.
Ada beberapa cara untuk mencapai pengetikan yang kuat, dan kami akan menghabiskan sisa artikel ini untuk menjelaskan cara membuat kumpulan data yang diketik dengan kuat di Visual Studio 2005. Kami juga akan membandingkan kelebihan dan kekurangan pendekatan ini dengan pendekatan lainnya.
Membuat Kumpulan Data yang Diketik dengan Kuat di Visual Studio 2005
Kumpulan data yang diketik dengan kuat sebenarnya hanyalah kolom dan tabel yang telah ditentukan sebelumnya dari kumpulan data biasa, sehingga kompiler sudah mengetahui isinya. Alih-alih bungkus longgar yang pas untuk Anda seperti sarung tangan baseball, kumpulan data yang diketik dengan kuat akan pas seperti sarung tangan. Setiap versi Visual Studio yang berurutan mempermudah penanganan kumpulan data yang diketik dengan kuat. Dalam contoh berikut, kita akan menggunakan database AdventureWorks dari SQL Server 2005. Cukup ikuti langkah-langkah ini:
1. Buka Visual Studio dan buat situs web ASP.NET baru.
2. Di jendela Solution Explorer, klik kanan untuk menambahkan item baru dan pilih DataSet. Beri nama AdventureWorks.xsd (lihat tangkapan layar). Visual Studio akan menyarankan Anda memasukkan file DataSet ke dalam file App_Code, dan Anda hanya perlu mengklik Agree.
3. Setelah membuka AdventureWorks.xsd dalam mode desain, wizard konfigurasi TableAdapter akan berjalan. Pada titik ini, klik Batal dan kami akan menyeret tabel yang diinginkan dari Server Explorer.
4. Telusuri untuk menemukan database AdventureWorks di toolbar Server Explorer. (Jika Anda belum menginstal database AdventureWorks, Anda dapat membuka halaman unduh Microsoft Sampel SQL Server 2005 dan Database Sampel untuk mengunduhnya dan beberapa sampel SQL Server 2005 lainnya)
5. Tarik tabel SalesOrderHeader dan tabel SalesOrderDetail ke dalam jendela desain DataSet. Jendelanya akan terlihat seperti pada tangkapan layar. Apa yang kita lihat? Setiap kali kita menambahkan tabel, Visual Studio akan membuat DataTable yang diketik dengan kuat (dengan nama yang sama dengan tabel asli) dan TableAdapter. DataTable ini telah mendefinisikan setiap kolom untuk kita. TableAdapter adalah apa yang kita gunakan untuk mengisi tabel. Secara default, ada metode Fill() untuk mengambil setiap baris data dari tabel asli.
Karenanya, kumpulan data yang diketik dengan kuat ini akan mengembalikan semua catatan dari kedua tabel. Namun database AdventureWorks berisi banyak informasi pesanan, jadi mengapa tidak membuat kueri yang lebih eksplisit? Kita dapat menambahkan metode ke objek TableAdapter untuk mendapatkan kumpulan sub-record tertentu. Klik kanan SalesORderHeaderTableAdapter dan pilih Tambahkan|Query. Pilih "Gunakan pernyataan SQL" dan klik Berikutnya, lalu pilih "PILIH yang mengembalikan baris" dan klik Berikutnya. Baru-baru ini, masukkan kueri berikut ke dalam jendela (atau Anda bisa menggunakan Pembuat Kueri untuk melakukan pekerjaan itu):
MEMILIH
SalesOrderID, Nomor Revisi, Tanggal Pemesanan, Tanggal Jatuh Tempo, Tanggal Pengiriman,
Status, Bendera Pesanan Online, Nomor Pesanan Penjualan, Nomor Pesanan Pembelian,
Nomor Akun, ID Pelanggan, ID Kontak, ID Tenaga Penjualan, ID Wilayah,
BillToAddressID, ShipToAddressID, ShipMethodID, CreditCardID,
Kode Persetujuan Kartu Kredit, ID Nilai Mata Uang, SubTotal, Amt Pajak, Pengangkutan,
TotalDue, Komentar, rowguid, ModifiedDate
DARI Sales.SalesOrderHeader
DIMANA (Tanggal Pemesanan > @Tanggal Pemesanan)
Kueri SQL ini adalah kueri SELECT sederhana, menggunakan parameter @OrderDate untuk memfilter hasilnya. Ini akan menyelamatkan kita dari mengembalikan semua catatan dalam database. Biarkan kotak centang "Isi DataTable" dan "Kembalikan DataTable" dan klik Selesai. Setelah menambahkan pernyataan SELECT ini, desainer Anda sekarang akan terlihat seperti tangkapan layar, dengan kueri tambahan di bawah SalesOrderHeaderTableAdapter.
Setelah kumpulan data yang diketik dengan kuat dibuat, kita dapat dengan mudah menampilkan data di halaman ASP.NET dengan beberapa baris kode. Buat halaman ASP.NET baru di situs web dan alihkan ke mode desain. Seret kontrol GridView ke dalamnya dan biarkan ID-nya sebagai GirdView1. Lalu buka halaman kode sumber dan perkenalkan namespace AdventureWorksTableAdapters di atas file (sintaks dalam c# menggunakan AdventureWorksTableAdapters;). Terakhir, tambahkan kode berikut ke event Page_Load:
// Buat SalesOrderHeaderTableAdapter
SalesOrderHeaderTableAdapter salesAdapter =
new SalesOrderHeaderTableAdapter();
// Dapatkan pesanan yang dilakukan setelah 1 Juli 2004
Pesanan AdventureWorks.SalesOrderHeaderDataTable =
salesAdapter.GetDataBy(new DateTime(2004, 7, 1));
// Ikat hasil pesanan ke GridView
this.GridView1.DataSource = Pesanan;
ini.GridView1.DataBind();
Kodenya sangat sederhana. Kami membuat instance SalesORderHeaderTableAdapter untuk mengisi tabel data. Yang perlu diperhatikan di sini adalah tidak seperti DataTable biasa, kita mendeklarasikan objek bertipe SalesORderHeaderDataTable. Kita memanggil metode GetDateBy() dan meneruskan objek DateTime untuk mengisi data. Perhatikan juga di sini bahwa perintah yang diperoleh juga diketik dengan kuat, jadi kita harus meneruskan objek DateTime alih-alih objek biasa. Tangkapan layar di bawah ini merupakan hasil contoh kode di atas.
Selain menggunakan kode untuk mengikat kumpulan hasil ke GridView, Anda juga dapat menggunakan ObjectDataSource, menyetel properti TypeName ke AdventureWorksTableAdapters.SalesOrderHeaderTableAdapter, dan menyetel SelectMethod ke GetData atau GetDataBy.
Selain tidak perlu menulis kode untuk terhubung ke database, keuntungan besar lainnya menggunakan kumpulan data yang diketik dengan kuat adalah tidak ada string nama kolom yang tersembunyi di kode kita yang tidak dapat diperiksa oleh kompiler. Kita juga tidak perlu melakukan konversi jenis apa pun. Jika skema database berubah, cukup perbarui file AdventureWorks.xsd dan kami akan menemukan bahwa semua perubahan terkait secara otomatis selesai pada waktu kompilasi.
Teknik Lain untuk Menghasilkan Aplikasi Akses Data dengan Tipe Kuat
Selain menggunakan kumpulan data dengan tipe kuat, ada cara lain untuk menerapkan pengetikan kuat dalam program Anda. Anda dapat membuat kelas khusus yang lebih ringan dibandingkan Kumpulan Data dan lebih konsisten dengan database Anda. Ada juga beberapa pengembang perangkat lunak pihak ketiga yang telah mengembangkan alat untuk mengotomatiskan proses ini. Salah satu yang lebih istimewa dan favorit saya adalah LLBLGen Pro. Saya pernah menulis buku tentangnya: Rapid C# Windows Development: Visual Studio 2005, SQL Server 2005, dan LLBLGen Pro. (Anda dapat membaca 1/3 bukunya secara gratis di situs web saya.) Alat populer lainnya adalah CodeSmith. Bahkan Microsoft sedang mengembangkan alat kecil bernama DLINQ, namun masih dalam tahap pengujian dan diperkirakan baru akan diluncurkan setidaknya tahun depan.
Jika Anda menggunakan pendekatan kumpulan data Visual Studio yang kuat, salah satu keuntungan yang tidak dapat disangkal adalah Anda tidak perlu membeli perangkat lunak tambahan. Semua solusi ini memiliki fitur dan manfaat yang berbeda, namun manfaat utamanya adalah keandalan, lebih sedikit kesalahan, dan lebih sedikit waktu yang dihabiskan untuk melakukan debug. Juga lebih mudah untuk memeriksa dampak perubahan skema database dan melakukan pemeliharaan. Semoga Anda menyadari manfaat mengetik yang kuat. Semoga sukses dengan perkembangannya (dan juga berkencan)!
Oleh
Lampiran
Joseph Chancellor
Unduh kode yang diperiksa di artikel ini
Tentang Penulis
Joseph Chancellor adalah pengembang C# di California Selatan yang sering mengalami trauma relasional. Dia menghargai segala jenis masukan dan saran. Kunjungi blognya atau baca lima bab pertama bukunya tentang Visual Studio 2005, SQL Server 2005, dan LLBLGen Pro.Alamat
asli: http://aspnet.4guysfromrolla.com/articles/020806-1.aspx