MetaDapper: Doğru Araçlarla Kolaylaştırılmış Veri Eşleme ve Dönüştürme
Yayınlanan: 2022-03-11Veri dönüştürme, çeviri ve haritalama hiçbir şekilde roket bilimi değildir, ancak kesinlikle sıkıcıdır. Basit bir veri dönüştürme görevi bile (örneğin, bir CSV dosyasını sınıf örnekleri listesine okumak) önemsiz olmayan miktarda kod gerektirebilir. Bu görevlerin tümü birçok ortak noktayı paylaşsa da, hepsi kendi veri dönüştürme yöntemlerini gerektirecek kadar "yeterince farklıdır".
Oluşturduğumuz hemen hemen her sistemde, ister mevcut bir veri deposundan veri almak, ister gelen bir akıştan veri işlemek, dahili için bir biçimden diğerine çeviri yapmak için olsun, bir noktada kendimizi verileri bir biçimden diğerine dönüştürmeye ihtiyaç duyduğumuzu bulacağız. verilerin işlenmesi veya istenen bir çıktı biçimine dönüştürülmesi.
Ve bunu her yaptığımızda, görev daha önce defalarca yaptığımıza çok sinir bozucu bir şekilde benziyor, ancak veri eşleme sürecini büyük ölçüde sıfırdan baştan yapmamızı gerektirecek kadar farklı görünüyor.
Ayrıca, bunlara erişim için en popüler formatlar ve teknolojiler gelişmeye devam ettikçe ve yenileri tanıtılıp popülerlik kazandıkça, programcılar sürekli olarak yeni veri dönüştürme ve haritalama teknikleri, kitaplıklar, API'ler ve çerçeveler öğrenmek zorunda kalıyor. Veri bilimi hizmetleri gelişmeye ve gelişmeye devam ettikçe, özel araçlara olan talep de artıyor.
AutoMapper (verileri bir nesneden diğerine eşlemek için) veya Resharper (mevcut kodu yeniden düzenlemek için) gibi araçlardan yararlanabilseniz de, ne yaparsanız yapın, kodu yazmak sıkıcı olacaktır ve her zaman korunması gerekecektir. Ardından, etki alanları arası çeviri işleme için bir çözüm bulmanız gerekir – örneğin dahili kodları ve anahtar değerleri başka bir katman veya sistem için değerlere dönüştürmek, boş değerleri varsayılan değerlere dönüştürmek, tür dönüştürme vb.
Doğrulama, DataAnnotations ve jQuery Validation eklentisi gibi teknolojiler ve tonlarca özel doğrulama kodu tarafından ele alınan benzer sorunlara sahiptir. Ve bu teknolojilerin her birinin nüansları oldukça ince olabilir.
Gelişmiş bir veri bilimcisi olarak kendinize “Daha iyi bir yol olmalı” diyorsunuz. Aslında var. Ve bu veri haritalama eğitimi bununla ilgili.
MetaDapper Veri Eşleme Aracının Tanıtımı
MetaDapper, veri dönüştürme sürecini mümkün olan en büyük ölçüde basitleştirmeye ve düzenlemeye çalışan bir .NET kitaplığıdır.
MetaDapper, aşağıdakileri yaparak veri dönüştürmeyi kolaylaştırır:
- Veri dönüştürme işleminin tekrarlanabilir standart bölümlerinin, her bir veri dönüştürme görevine özgü yönlerden ayrıştırılması.
- Rastgele karmaşıklıkta eşleme ve çeviri kurallarını belirlemek için kullanımı kolay, sezgisel bir kullanıcı arabirimi sağlar.
MetaDapper, mantıksal eşlemeyi (şema, veri çevirisi ve doğrulama) fiziksel veri eşlemeden (çeşitli dosya biçimlerine ve API'lere dönüştürme ve bunlardan dönüştürme) ayırır. Mantıksal eşleme, güçlü bir dizi işleve sahiptir ve çok özel ihtiyaçları ele almak için kendi yöntemlerinize bağlanmanıza olanak tanır. Fiziksel eşleme, sürekli olarak genişletilen zengin bir desteklenen biçimler kümesi içerir. Bir eşlemeyi yapılandırmak için MetaDapper Yapılandırıcı sağlanır; Eşlemeler oluşturmak ve düzenlemek ve bunları test etmek veya tek seferlik dönüşümler için yürütmek için kullanımı basit bir Windows yürütülebilir dosyası.
Sınıf örnekleri listesini XML veya CSV dosyalarına dönüştürmek, SQL veritabanı kayıtlarını doldurmak, tabloları doldurmak için SQL komut dosyaları oluşturmak, elektronik tablolar oluşturmak ve çok daha fazlası, çoğu zaman saniyeler içinde oluşturulabilen aynı yapılandırma dosyası kullanılarak yapılır.
MetaDapper'ı .NET programınıza dahil etmek için yapmanız gerekenler:
- Kitaplığa bir referans ekleyin
- MetaDapper motorunu örnekleyin
- Kaynak okuyucuyu (ve herhangi bir parametreyi), hedef yazıcıyı (ve herhangi bir parametreyi) ve yapılandırma dosyanızı belirterek eşlemeyi yürütün.
Başarılı olduğunda, yazar dönüştürülmüş verileri çıkaracaktır. Hata durumunda, bir istisna ayrıntılı hata bilgilerini geri verir, böylece verileri reddedebilir veya yapılandırmayı ayarlayabilirsiniz.
İşte kısa bir veri eşleme örneği:
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; }
MetaDapper "Yapılandırıcı"
MetaDapper Configurator, veri yapınızı ve dönüştürme/eşleme kurallarınızı tanımlama adımlarını görsel olarak gözden geçirmenin bir yolunu sunar. Konfigüratör, konfigürasyonlar oluşturmanıza, düzenlemenize ve yürütmenize (yani, test veya tek seferlik dönüşümler için) olanak tanır.
MetaDapper'ın Yapılandırıcısı, sürecin mümkün olduğunca çoğunu otomatikleştirmeye çalışır. Örneğin, bir alan eşlemesi belirtilirken, kaynak ve hedef alanlar, mümkün olduğunda ad eşleştirme kullanılarak otomatik olarak eşleştirilir. Ayrıca, meta veri içeren veri kaynakları için Kayıt Tanımları oluşturulurken, veri kaynağına işaret edilerek alan tanımları otomatik olarak doldurulabilir.
Bir Kayıt Tanımı oluşturulduktan sonra, (varsa) oluşturulduğu veri kaynağına olan bağlantısını korur, böylece veri kaynağı şeması sonradan değişirse otomatik olarak güncellenebilir. Çok az meta verisi olan veya hiç olmayan bir veri kaynağı için bir Kayıt Tanımı yapılandırırken, meta veri içeren başka bir benzer veri kaynağı mevcutsa, bu Kayıt Tanımı, yeni Kayıt Tanımı için temel olarak hizmet etmek üzere (meta verileriyle birlikte) kopyalanabilir ve daha sonra iki veri kaynağı arasında var olabilecek farklılıkları yansıtacak şekilde düzenlenebilir. Birden çok veri kaynağı için şema ve meta verinin aynı olduğu durumlarda, hepsi için tek bir Kayıt Tanımı kullanılabilir.
Veri dönüştürme sürecini basitleştirme
Veri dönüştürme sürecinin doğasında bulunan bazı zorluklara ve MetaDapper'ın bunları geliştirici için kolaylaştırma ve basitleştirme yollarına daha ayrıntılı olarak bakalım.
Kaynağı hedef verilere eşleme
Bakım sırasında bir iç veya dış yapı değiştirildiğinde, bu yapılara dayanan herhangi bir eşleme kodunun da ayarlanması gerekebilir. Bu, genellikle bakım çalışmalarının gerekli olduğu bir alandır, bu nedenle hangi çözümü kullanırsanız kullanın, bakım maliyetlerinin değerlendirilmesi gerekir. Örneğin, bir Sale sınıfından bir TotalSale özelliği kaldırılırsa, ilgili tüm eşleme atamalarının buna göre ayarlanması gerekir.
MetaDapper ile bir eşlemenin güncellenmesi birkaç saniye kadar kısa sürebilir. Örneğin, bir sınıf türü için alanları yeni derlenmiş tanımla yenilemek için "Sınıftan alan tanımlarını içe aktar" düğmesini tıklamanız yeterlidir:
Tür dönüştürme
Örneğin Tarih/Saat ve Sayı türü dönüştürmeleri gibi bazı tür dönüştürmeleri, ana bilgisayar ortamının uluslararası ayarlarına duyarlıdır (kodda açıkça belirtilmediği sürece). Bu nedenle, farklı uluslararası ayarlara sahip yeni bir sunucuda bir uygulama dağıtmak, bunu hesaba katmayan kodu kırabilir. Örneğin, "1-2-2014" tarih değeri, ABD ayarlarına sahip bir makinede 2 Ocak 2014, İngiltere ayarlarına sahip bir makinede 1 Şubat 2014 olarak yorumlanacaktır. MetaDapper, tüm örtük .NET dönüşümlerini destekler ve ayrıca, çevirinin bir parçası olarak değerlerin karmaşık yeniden biçimlendirilmesine izin verir. Ayrıca, MetaDapper okuyucularında, yazarlarında ve haritalama motorunda ayrı (yani bağımsız) uluslararası ayarlar belirtilebilir.
Karmaşık varsayılan değerler
Bazen, varsayılan bir değer belirlemek için diğer sistemlere erişim gerektiren veya karmaşık kodlama gerektiren belirli iş kurallarına ihtiyaç duyulur. MetaDapper, herhangi bir sayıda özel temsilci yönteminin motora kaydedilmesine ve varsayılan değerler sağlamak, özel veri dönüştürmesi gerçekleştirmek ve özel alan doğrulaması sağlamak için kullanılmasına izin verir.
Koşullu doğrulama kuralları
Alan değerlerinin koşullu olarak gerekli olması (hatta geçerli değerlerinin diğer alanların değerlerine bağlı olması) alışılmadık bir durum değildir. Örneğin, Ortak Adı ve Ortak Sosyal Güvenlik Kodu alanları boş bırakılabilir, ancak bir Ortak Adı sağlanırsa, Ortak Sosyal Güvenlik Kodu (ve muhtemelen diğer alanlar) sağlanmalıdır. Bu tür koşullu doğrulama karmaşıktır ve özel kodda yanlış anlaşılması kolaydır. Buna karşılık MetaDapper, bu tür veri eşleme ilişkisinin kolayca yapılandırılmasına izin verir. Spesifik olarak, bir Kayıt Tanımındaki alanların listesi bir Koşullu Zorunlu Alanlar Grubunda listelenebilir:

Daha sonra bir eşlemede grup, boş değilse sırayla gruptaki tüm alanların sağlanmasını gerektiren herhangi bir alanla ilişkilendirilebilir. Örneğin:
Etki alanları arasında eşlenen değerleri dönüştürme
Kaynak veriler tutarsız değerler içerebilir. Örneğin, bir selamlama alanı tüm kadın eşdeğerlerinin yanı sıra “Bay”, “Bay”, “Bay.”, “Bay” veya “M” içerebilir. Veya bir para birimi alanı "$" gibi bir değer içerebilirken, hedef biçiminiz "USD" gerektiriyor. Ürün kodları, bir sistemden diğerine dönüştürülmesi gerekebilecek değerlere başka bir örnektir. MetaDapper, eşlemeler sırasında değerleri çevirmek için kullanılabilecek yeniden kullanılabilir "eşanlamlı listelerin" belirtimine izin verir.
Tanımlandıktan sonra, herhangi bir ilgili alan eşlemesinde kullanmak için Eş Anlamlı Grubu belirtebilirsiniz:
Değer biçimlendirmesine ve karmaşık hesaplamalara dayalı eşlemeler
Yeni bir değeri biçimlendirmek için bir veya daha fazla alandaki değerlerin kullanılması gerekebilir. Örneğin, kaynak değerin sabitlerle süslenmesi gerekebilir (örneğin, sale.PriceEach = "$" + priceEach;
) veya bir değer oluşturmak için birkaç alanın kullanılması gerekebilir (örneğin, sale.Code = code1 + “_” + code2;
).
MetaDapper, alanların alt dize bölümleri veya sabit değerler dahil olmak üzere geçerli kayıttaki alanlardan herhangi birini kullanarak değerler oluşturmanıza olanak tanıyan bir biçimlendirme/şablon oluşturma yeteneği sağlar. Biçimlendirmeden sonra, değer belirtilen hedef tipine dönüştürülecektir (bunun bir dizge olması gerekmez).
Benzer şekilde, haritalamalar sırasında, alan değerleri ve sabitlerin herhangi bir kombinasyonunda tam bir matematiksel operatör ve fonksiyon seti kullanılarak karmaşık hesaplamalar gerçekleştirilebilir.
Doğrulama kuralları
Özel doğrulama temsilcileri kaydedilebilir ve eşlemelerde kullanılabilir. Bir alan değerinin bir tamsayı olduğunu doğrulamak için özel bir yöntem örneği (alan için veri türünü bir tamsayı yapmadan):
private static bool ValidateIsInteger( Log log, CultureInfo cultureInfo, object value, ref List<ErrorInfo> errors) { try { Convert.ToInt32(value); } catch (Exception) { return false; } return true; }
Yöntem, MetaDapper başlatılırken kaydedilir. Ardından, herhangi bir Alan Eşleme Tanımında kolayca uygulanabilir:
Gruplama, Sıralama ve Filtreleme
Gruplama ve sıralama işlemleri genellikle bir veritabanı sorgusunda gerçekleştirilebilir, ancak tüm veri kaynakları veritabanları değildir. Bu nedenle MetaDapper, bellekte gerçekleştirilebilen karmaşık gruplama ve sıralama işlemlerinin yapılandırmasını destekler.
Kaynak verilerin yalnızca bir bölümünün gerekli olabileceği durumlarda, veritabanı dışı kaynaklardan filtreleme uygulamak ve sürdürmek çok karmaşık olabilir. MetaDapper, gerektiğinde işlemlerin keyfi olarak iç içe yerleştirilmesiyle, kayıt başına herhangi bir sayıda alan değerlendirmesi için Boole operatörleriyle karmaşık filtrelerin yapılandırılmasını destekler. Örneğin:
Yukarıdaki filtre, aşağıdaki C# koduna eşdeğerdir:
if (sale.TransactionID > “0” AND sale.Currency == “USD” AND (sale.Amount > “3” || sale.Amount == “1”)
İç içe eşlemeler
Bazı eşlemeler, veri dönüştürme işlemini tamamlamak için birden çok geçiş gerektirir. Bazı örnekler, ön ek veya toplama kayıtları gerektiren verileri, alan değerlerine veya belge yapısına bağlı olarak farklı şekilde eşlenmesi gereken verileri veya karmaşık bir eşlemenin farklı aşamalarını izole etmek için gereken verileri içerir (yani, adları çevirme, tür dönüşümleri vb.). Bu amaçla MetaDapper, herhangi bir derinlik düzeyinde iç içe eşlemeleri destekler.
Biçim ve yapı
Bir veri eşleme ve dönüştürme aracı olarak MetaDapper, neredeyse tüm veri biçimlerinin dahili okuyucu ve yazar arabirimleri kullanılarak okunmasına veya yazılmasına izin verecek şekilde yapılandırılmıştır. Bu, son derece hafif olan ve yalnızca biçime özgü nüanslara odaklanan okuyucu/yazıcı sınıflarının oluşturulmasına olanak tanır.
Okuyucular ve yazarlar da mümkün olduğunca akıllı ve esnek davranırlar. Örneğin, XML okuyucu ve yazıcı, bir XML dosyasında verilerin nereden alınacağını veya nereye yazılacağını belirtmek için XPath'leri kullanır. Aynı konfigürasyon, örneğin XML olmayan formatlardan (CSV dosyaları gibi) okumak ve yazmak için de kullanılabilir; bu durumda XPath değerleri basitçe yok sayılır. Benzer şekilde, bir XML okuyucu veya yazıcı ile XPath ayarlarını içermeyen bir yapılandırma kullanılırsa, bir hata oluşturulur.
Evet. Doğru. Emin. (Bazı Gerçek Veri Eşleme Örnekleri)
şüphecisin. Ve seni suçlamıyorum. Yazılım araçları nadiren iddia ettikleri her şeydir. İşte MetaDapper'ın operasyonel fayda sağlamak için kullanıldığı birkaç gerçek dünya örneği.
Sağlık sigortası yönetimi yazılımı sağlayan bir şirketin, web formlarını doldurmak istemeyen ancak verilerini elektronik tablolarda sağlamak isteyen müşterileri vardı. MetaDapper kullanarak, yüklenen elektronik tablolar belleğe okunur, veriler temizlenir, kayıtlar doğrulanır ve sonuçlar veri tabanlarında saklanır. Yayınladıkları her elektronik tablo şablonu için oluşturması kolay bir yapılandırma dosyasıyla MetaDapper'ı kullanarak herhangi bir insan doğrulaması olmadan müşterilerinden Excel dosyalarını kabul edebiliyorlar.
Büyük bir gaz şirketinin dahili bir uygulaması var ve yönetim kullanıcılarının raporları Excel formatında indirebilmelerini istedi. Rapor formatları muhtemelen düzenli olarak değiştirilecektir. MetaDapper, veritabanlarından oluşturulacak Excel sayfalarını kolaylaştırdı. Excel biçimlerinin güncellenmesi, yalnızca MetaDapper yapılandırma dosyalarının herhangi bir kod değişikliği veya yeniden derleme olmadan güncellenmesini gerektiriyordu.
Varlık yönetimi yazılımı sağlayan bir şirketin, bu sistemlere aktarmak için müşteriye bağlı muhasebe paketi formatlarında finansal veriler üretmek için bir çözüme ihtiyacı vardı. Bir ORM sarmalayıcısı kullanılarak genel bir muhasebe verisi sorgusu geliştirildi ve verileri her müşteri için istenen şema ve formatta sıralamak, filtrelemek ve eşlemek için MetaDapper kullanıldı. Her müşteri için bir veya daha fazla MetaDapper yapılandırması yapılır ve bu, yeni müşteriler için önemli bir satış özelliği haline gelmiştir. Ürün, herhangi bir özel veya standart muhasebe paketi biçimini desteklemek için dakikalar içinde yapılandırılabilir (MetaDapper kullanılarak), bu nedenle her yeni satışa temel ve mevcut sistemlerle entegrasyon dahildir. Aynı şirket, MetaDapper'ı çeşitli yazılım entegrasyon projelerinde, verileri eşleme ve dönüştürmede ve kendi sistemleri arasında dahili kodları dönüştürmede kullanıyor.
Büyük bir otomatik satıcının uygulamalarından birine Excel formatında bazı satış raporları eklemesi gerekiyordu. Raporlar bir saatten daha kısa sürede uygulamaya eklendi – baştan sona.
Bir geliştiricinin, başka bir web sitesinde kullanılan setle aynı ABD Eyaletleri tablosuna ihtiyacı vardı. MetaDapper, siteden veri madenciliği yapmak ve tablosunu birkaç dakika içinde doldurmak için bir SQL betiği oluşturmak için kullanıldı.
Bunlar, bir veri eşleme aracı olarak MetaDapper'ın kanıtlanmış yardımcı programına ve değerine yalnızca birkaç örnektir.
Sarmak
Veri dönüştürme hakkında daha genel düşünmeye başlamak ve iş kuralları ve sınırsız kullanışlılığı olan veri kümeleri hakkında düşünmeye başlamak için zihinsel bir sıçrama gerekir. MetaDapper, bu bakış açısını destekleyen ve kolaylaştıran bir çerçevedir.
İster başka bir teknoloji olan MetaDapper'ı kullanın, ister kendi veri eşleme çözümlerinizi kullanın, bu, veri dönüştürme projelerindeki bazı karmaşıklık ve gizli maliyetlere bir giriş niteliğindedir. Umarım bilgilendirici bulursunuz.
(MetaDapper hakkında daha fazla bilgi için [email protected] adresinden MetaDapper ekibiyle iletişime geçin.)