MetaDapper: Pemetaan dan Konversi Data Menjadi Mudah Dengan Alat yang Tepat
Diterbitkan: 2022-03-11Konversi data, terjemahan, dan pemetaan sama sekali bukan ilmu roket, tetapi tentu saja membosankan. Bahkan tugas konversi data sederhana (misalnya, membaca file CSV ke dalam daftar instance kelas) dapat memerlukan jumlah kode yang tidak sepele. Meskipun semua tugas ini memiliki banyak kesamaan, semuanya "cukup berbeda" untuk memerlukan metode konversi data mereka sendiri.
Di hampir setiap sistem yang kami bangun, pada titik tertentu kami akan menemukan diri kami perlu mengubah data dari satu bentuk ke bentuk lainnya, baik untuk mengimpor data dari penyimpanan data yang ada, memproses data dari aliran masuk, menerjemahkan dari satu format ke format lain untuk internal memproses, atau mengubah data ke format output yang diinginkan.
Dan setiap kali kami melakukannya, tugas tersebut tampaknya sangat mirip dengan apa yang telah kami lakukan berkali-kali sebelumnya, namun memiliki perbedaan yang cukup untuk mengharuskan kami melakukan proses pemetaan data lagi, sebagian besar dari awal.
Selain itu, karena format dan teknologi paling populer untuk mengaksesnya terus berkembang, dan yang baru diperkenalkan dan mendapatkan popularitas, pemrogram berkewajiban untuk terus-menerus mempelajari konversi data dan teknik pemetaan, perpustakaan, API, dan kerangka kerja baru. Karena layanan ilmu data terus berkembang dan berkembang, permintaan akan alat khusus juga berkembang.
Meskipun Anda dapat memanfaatkan alat seperti AutoMapper (untuk memetakan data dari satu objek ke objek lain) atau Resharper (untuk memfaktorkan ulang kode yang ada), apa pun yang Anda lakukan, kode akan membosankan untuk ditulis dan akan selalu perlu dipertahankan. Dan kemudian Anda harus menemukan solusi untuk penanganan terjemahan lintas domain – seperti mengonversi kode internal dan nilai kunci ke nilai untuk lapisan atau sistem lain, nilai nol ke nilai default, konversi jenis, dll.
Validasi memiliki masalah serupa yang ditangani oleh teknologi seperti DataAnnotations dan plugin Validasi jQuery dan oleh rim kode validasi khusus. Dan nuansa dengan masing-masing teknologi ini bisa sangat halus.
Sebagai ilmuwan data tingkat lanjut, Anda mengatakan pada diri sendiri "Pasti ada cara yang lebih baik." Nah, sebenarnya ada. Dan itulah yang dimaksud dengan tutorial pemetaan data ini.
Memperkenalkan Alat Pemetaan Data MetaDapper
MetaDapper adalah pustaka .NET yang berusaha menyederhanakan dan merampingkan proses konversi data semaksimal mungkin.
MetaDapper memfasilitasi konversi data dengan:
- Memisahkan bagian boilerplate berulang dari proses konversi data dari aspek-aspek yang unik untuk setiap tugas transformasi data.
- Menyediakan antarmuka pengguna yang intuitif dan mudah digunakan untuk menentukan pemetaan dan aturan terjemahan dengan kompleksitas yang berubah-ubah.
MetaDapper memisahkan pemetaan logis (skema, terjemahan data, dan validasi) dari pemetaan data fisik (konversi ke dan dari berbagai format file dan API). Pemetaan logis menampilkan serangkaian fungsi yang kuat dan memungkinkan Anda untuk menghubungkan metode Anda sendiri untuk menangani kebutuhan yang sangat spesifik. Pemetaan fisik mencakup serangkaian format yang didukung yang terus diperluas. Untuk mengonfigurasi pemetaan, MetaDapper Configurator disediakan; mudah digunakan Windows yang dapat dieksekusi untuk membuat dan mengedit pemetaan, dan untuk menjalankannya untuk pengujian atau untuk konversi satu kali.
Mengonversi daftar instance kelas ke file XML atau CSV, mengisi catatan database SQL, membuat skrip SQL untuk mengisi tabel, membuat spreadsheet, dan banyak lagi, semuanya dilakukan menggunakan file konfigurasi yang sama yang sering kali dapat dibuat dalam hitungan detik.
Untuk memasukkan MetaDapper dalam program .NET Anda, Anda hanya perlu:
- Tambahkan referensi ke perpustakaan
- Instansiasi mesin MetaDapper
- Jalankan pemetaan, tentukan pembaca sumber (dan parameter apa pun), penulis tujuan (dan parameter apa pun), dan file konfigurasi Anda.
Jika berhasil, penulis akan menampilkan data yang diubah. Pada kesalahan, pengecualian akan mengembalikan informasi kesalahan terperinci sehingga Anda dapat menolak data atau menyesuaikan konfigurasi.
Berikut adalah contoh pemetaan data singkat:
List<MyClass> result; try { // Instantiate the MetaDapper library. var log = new Log(); var cultureInfo = new CultureInfo("en-US"); var md = new MetaDapper.Engine.MetaDapper(log, cultureInfo); using (var inputStream = new StreamReader(@"C:\myfile.csv")) { md.MapData( new CsvReaderParameters { Log = log, CultureInfo = cultureInfo, InputStream = inputStream.BaseStream, InputEncoding = Encoding.ASCII, FirstRecordIsHeader = false }, new PublicPropertiesWriterParameters { Log = log, CultureInfo = cultureInfo }, @"C:\MyMetaDapperConfiguration.xml", false, out result); } } catch (Exception) { throw; }
"Konfigurator" MetaDapper
MetaDapper Configurator menyediakan cara untuk memandu secara visual langkah-langkah mendefinisikan struktur data dan aturan konversi/pemetaan Anda. Configurator memungkinkan Anda untuk membuat, mengedit, dan menjalankan konfigurasi (yaitu, untuk pengujian atau konversi satu kali).
Configurator MetaDapper berusaha untuk mengotomatisasi proses sebanyak mungkin. Misalnya, saat menentukan pemetaan bidang, bidang sumber dan tujuan dicocokkan secara otomatis bila memungkinkan menggunakan pencocokan nama. Juga, saat membuat Definisi Rekaman untuk sumber data yang berisi metadata, definisi bidang dapat diisi secara otomatis dengan menunjuk ke sumber data.
Setelah dibuat, Definisi Rekaman mempertahankan tautannya ke sumber data tempat asalnya dibuat (jika ada) sehingga dapat diperbarui secara otomatis jika skema sumber data kemudian berubah. Saat mengonfigurasi Definisi Rekam untuk sumber data dengan sedikit atau tanpa metadata yang tersedia, jika sumber data serupa lainnya tersedia yang memang berisi metadata, Definisi Rekam tersebut dapat disalin (dengan metadatanya) untuk dijadikan dasar bagi Definisi Rekam baru dan kemudian dapat diedit untuk mencerminkan perbedaan yang mungkin ada antara kedua sumber data. Dan dalam kasus di mana skema dan metadata identik untuk beberapa sumber data, satu Definisi Rekaman dapat digunakan untuk semuanya.
Menyederhanakan proses konversi data
Mari kita lihat lebih detail beberapa tantangan yang melekat dalam proses konversi data dan cara MetaDapper memfasilitasi dan menyederhanakannya untuk pengembang.
Memetakan sumber ke data tujuan
Ketika struktur internal atau eksternal diubah selama pemeliharaan, kode pemetaan apa pun yang bergantung pada struktur ini mungkin perlu disesuaikan juga. Ini adalah area di mana pekerjaan pemeliharaan sering diperlukan, jadi apa pun solusi yang Anda gunakan, biaya pemeliharaan perlu dievaluasi. Misalnya, jika properti TotalSale dihapus dari kelas Penjualan, tugas pemetaan terkait perlu disesuaikan.
Dengan MetaDapper, memperbarui pemetaan hanya membutuhkan waktu beberapa detik. Untuk tipe kelas, misalnya, cukup klik tombol “Impor definisi bidang dari kelas” untuk menyegarkan bidang ke definisi yang baru dikompilasi:
Konversi jenis
Beberapa jenis konversi, seperti Tanggal/Waktu dan konversi jenis Nomor misalnya, sensitif terhadap pengaturan internasional lingkungan host (kecuali secara eksplisit ditentukan dalam kode). Menyebarkan aplikasi di server baru dengan pengaturan internasional yang berbeda dapat memecahkan kode yang tidak memperhitungkan hal ini. Nilai tanggal “1-2-2014”, misalnya, akan ditafsirkan sebagai 2 Januari 2014 di mesin dengan setelan AS, tetapi sebagai 1 Februari 2014 di mesin dengan setelan Inggris Raya. MetaDapper mendukung semua konversi .NET implisit dan memungkinkan pemformatan ulang nilai yang kompleks sebagai bagian dari terjemahan juga. Selain itu, pengaturan internasional yang terpisah (yaitu, independen) dapat ditentukan di pembaca MetaDapper, penulis, dan mesin pemetaan.
Nilai default yang kompleks
Terkadang, aturan bisnis khusus yang memerlukan akses ke sistem lain, atau memerlukan pengkodean yang kompleks, untuk menentukan nilai default diperlukan. MetaDapper memungkinkan sejumlah metode delegasi kustom untuk didaftarkan dengan mesin dan digunakan untuk memberikan nilai default, melakukan konversi data kustom, dan untuk memberikan validasi bidang kustom.
Aturan validasi bersyarat
Tidak jarang nilai bidang diperlukan secara kondisional (atau bahkan nilai validnya bergantung pada nilai bidang lain). Misalnya, mungkin bidang Nama Mitra dan Kode Jaminan Sosial Mitra dapat dikosongkan, tetapi jika Nama Mitra diberikan, maka Kode Jaminan Sosial Mitra (dan mungkin bidang lainnya) harus disediakan. Jenis validasi bersyarat ini rumit dan mudah salah dalam kode khusus. Sebaliknya, MetaDapper memungkinkan jenis hubungan pemetaan data ini dapat dikonfigurasi dengan mudah. Secara khusus, daftar bidang dalam Definisi Rekaman dapat dicantumkan dalam Grup Bidang Wajib Bersyarat:

Kemudian dalam pemetaan, grup dapat dikaitkan dengan bidang apa pun yang, jika bukan nol, akan mengharuskan semua bidang dalam grup disediakan. Sebagai contoh:
Mengonversi nilai yang dipetakan di seluruh domain
Data sumber mungkin berisi nilai yang tidak konsisten. Misalnya, bidang salam dapat berisi "Tuan", "Tuan", "MR.", "Tuan" atau "M" serta semua padanan wanita. Atau bidang mata uang mungkin berisi nilai seperti “$” sedangkan format tujuan Anda memerlukan “USD”. Kode produk adalah contoh lain dari nilai yang mungkin perlu diubah dari satu sistem ke sistem lainnya. MetaDapper memungkinkan spesifikasi "daftar sinonim" yang dapat digunakan kembali yang dapat digunakan untuk menerjemahkan nilai selama pemetaan.
Setelah ditentukan, Anda dapat menentukan Grup Sinonim untuk menggunakannya dalam pemetaan bidang yang relevan:
Pemetaan berdasarkan pemformatan nilai dan perhitungan yang rumit
Nilai dari satu atau beberapa bidang mungkin perlu digunakan untuk memformat nilai baru. Misalnya, nilai sumber mungkin perlu didekorasi dengan konstanta (misalnya, sale.PriceEach = "$" + priceEach;
) atau beberapa bidang mungkin perlu digunakan untuk menghasilkan nilai (misalnya, sale.Code = code1 + “_” + code2;
).
MetaDapper menyediakan kemampuan format/templat yang memungkinkan Anda membangun nilai menggunakan salah satu bidang dalam catatan saat ini, termasuk bagian substring bidang atau nilai konstan. Setelah memformat, nilai akan dikonversi ke jenis tujuan yang ditentukan (yang, kebetulan, tidak perlu berupa string).
Demikian pula, perhitungan kompleks dapat dilakukan selama pemetaan, menggunakan set lengkap operator dan fungsi matematika pada kombinasi nilai dan konstanta bidang apa pun.
Aturan validasi
Delegasi validasi kustom dapat didaftarkan dan digunakan dalam pemetaan. Berikut adalah contoh metode kustom untuk memvalidasi bahwa nilai bidang adalah bilangan bulat (tanpa membuat tipe data untuk bidang tersebut bilangan bulat):
private static bool ValidateIsInteger( Log log, CultureInfo cultureInfo, object value, ref List<ErrorInfo> errors) { try { Convert.ToInt32(value); } catch (Exception) { return false; } return true; }
Metode ini akan didaftarkan saat membuat instance MetaDapper. Maka itu dapat dengan mudah diterapkan dalam Definisi Pemetaan Bidang apa pun:
Pengelompokan, Penyortiran, dan Penyaringan
Operasi pengelompokan dan pengurutan sering dapat ditangani dalam kueri basis data tetapi tidak semua sumber data adalah basis data. Oleh karena itu MetaDapper mendukung konfigurasi operasi pengelompokan dan pengurutan yang kompleks yang dapat dilakukan di dalam memori.
Dalam kasus di mana hanya sebagian dari data sumber yang mungkin diperlukan, pemfilteran dari sumber non-basis data bisa sangat rumit untuk diterapkan dan dipelihara. MetaDapper mendukung konfigurasi filter kompleks dengan operator Boolean untuk sejumlah evaluasi lapangan per record, dengan operasi nesting yang sewenang-wenang sesuai kebutuhan. Sebagai contoh:
Filter di atas setara dengan kode C# berikut:
if (sale.TransactionID > “0” AND sale.Currency == “USD” AND (sale.Amount > “3” || sale.Amount == “1”)
Pemetaan bersarang
Beberapa pemetaan memerlukan beberapa lintasan untuk menyelesaikan proses konversi data. Beberapa contoh termasuk data yang memerlukan catatan awalan atau penjumlahan, data yang perlu dipetakan secara berbeda tergantung pada nilai bidang atau struktur dokumen, atau hanya untuk mengisolasi tahapan yang berbeda dari pemetaan kompleks (yaitu menerjemahkan nama, konversi jenis, dll.). Untuk itu, MetaDapper mendukung pemetaan bersarang ke tingkat kedalaman apa pun.
Format vs. struktur
Sebagai alat pemetaan dan konversi data, MetaDapper dibuat untuk memungkinkan hampir semua format data dibaca atau ditulis menggunakan antarmuka pembaca dan penulis internal. Hal ini memungkinkan pembuatan kelas pembaca/penulis yang sangat ringan dan terfokus pada nuansa khusus format saja.
Pembaca dan penulis juga berperilaku secerdas dan sefleksibel mungkin. Misalnya, pembaca dan penulis XML menggunakan XPaths untuk menentukan tempat untuk mengambil atau menulis data ke dalam file XML. Konfigurasi yang sama juga dapat digunakan untuk membaca dan menulis, misalnya, dari format non-XML (seperti file CSV) di mana nilai XPath akan diabaikan begitu saja. Demikian juga, jika konfigurasi yang tidak menyertakan pengaturan XPath digunakan dengan pembaca atau penulis XML, kesalahan akan dibuat.
Ya. Benar. Tentu. (Beberapa Contoh Pemetaan Data Nyata)
Anda skeptis. Dan aku tidak menyalahkanmu. Alat perangkat lunak jarang seperti yang mereka klaim. Jadi, inilah beberapa contoh dunia nyata di mana MetaDapper telah digunakan untuk memberikan manfaat operasional.
Sebuah perusahaan yang menyediakan perangkat lunak manajemen asuransi kesehatan memiliki pelanggan yang tidak ingin mengisi formulir web tetapi ingin memberikan data mereka dalam spreadsheet. Menggunakan MetaDapper, spreadsheet yang diunggah dibaca ke dalam memori, data dibersihkan, catatan divalidasi, dan hasilnya disimpan dalam basis datanya. Mereka dapat menerima file Excel dari pelanggan mereka tanpa validasi manusia menggunakan MetaDapper dengan file konfigurasi yang mudah dibuat untuk setiap template spreadsheet yang mereka terbitkan.
Sebuah perusahaan gas besar memiliki aplikasi internal dan ingin pengguna manajemen mereka dapat mengunduh laporan dalam format Excel. Format laporan kemungkinan akan diubah secara berkala. MetaDapper memfasilitasi lembar Excel yang akan dihasilkan dari database mereka. Memperbarui format Excel hanya diperlukan memperbarui file konfigurasi MetaDapper tanpa perubahan kode atau kompilasi ulang.
Sebuah perusahaan yang menyediakan perangkat lunak manajemen aset membutuhkan solusi untuk menghasilkan data keuangan dalam format paket akuntansi yang bergantung pada pelanggan untuk diimpor ke sistem tersebut. Kueri data akuntansi generik dikembangkan menggunakan pembungkus ORM dan MetaDapper digunakan untuk mengurutkan, memfilter, dan memetakan data ke dalam skema dan format yang diinginkan untuk setiap pelanggan. Satu atau lebih konfigurasi MetaDapper dibuat untuk setiap pelanggan dan ini telah menjadi fitur penjualan utama bagi pelanggan baru. Produk dapat dikonfigurasi (menggunakan MetaDapper) dalam hitungan menit untuk mendukung format paket akuntansi kustom atau standar apa pun sehingga integrasi dengan sistem penting dan yang sudah ada disertakan dengan setiap penjualan baru. Perusahaan yang sama menggunakan MetaDapper dalam berbagai proyek integrasi perangkat lunak, pemetaan dan konversi data dan konversi kode internal antara sistem mereka.
Pengecer mobil besar perlu menambahkan beberapa laporan penjualan dalam format Excel ke salah satu aplikasi mereka. Laporan ditambahkan ke aplikasi dalam waktu kurang dari satu jam – mulai sampai selesai.
Pengembang membutuhkan tabel Negara Bagian AS yang identik dengan kumpulan yang digunakan di situs web lain. MetaDapper digunakan untuk menambang data dari situs dan menghasilkan skrip SQL untuk mengisi tabelnya dalam beberapa menit.
Ini hanyalah beberapa contoh utilitas dan nilai MetaDapper yang telah terbukti sebagai alat pemetaan data.
Bungkus
Dibutuhkan lompatan mental untuk mulai berpikir tentang konversi data secara lebih umum dan mulai berpikir tentang kumpulan data dengan aturan bisnis dan kegunaan tak terbatas. MetaDapper adalah kerangka kerja yang mendorong dan memfasilitasi perspektif itu.
Baik Anda menggunakan MetaDapper, teknologi lain, atau menggulung solusi pemetaan data Anda sendiri, ini telah menjadi pengantar beberapa kompleksitas dan biaya tersembunyi dalam proyek konversi data. Saya harap Anda menemukannya informatif.
(Untuk informasi lebih lanjut tentang MetaDapper, hubungi tim MetaDapper di [email protected].)