MS Veri Erişimi hikayesi neden bu kadar kırılmış? Veri Erişiminin doğası mıdır, yoksa sadece MS mi?


11

Bu StackOverflow soru "Microsoft.Data.Objects nereden bulabilirim" soruyor

Yanıt muhtemelen Entity Framework 4 CTP4 (ilk kod) sürümünde olduğu ortaya çıktı Ancak orada bir sürü tahmin. Dahil olmak üzere

  • Sistem verisi
  • Varlık Çerçevesi
  • Microsoft.ApplicationBlocks.Data
  • Microsoft.Practices.EnterpriseLibrary.Data

10 yıl önce birisi benzer bir soru sorduğunda DAO, RDO, ADO almış olabilir.

Bu sadece canavarın doğası mı yoksa MS mi?

Bu kalıp diğer satıcılarda mı oluyor? Temel veri erişim stratejisi nereye sarılır veya değiştirilir?

Yanıtlar:


11

Tarihsel / Evrimsel ve Piyasa Gücü Sebeplerinin Birleşimi

Birkaç yıl önce Microsoft'ta çalışırken, geliştirmede birkaç farklı veri teklifi olduğu açıktı. Tekliflerin her biri belirli bir pazara veya kullanım durumuna yönelikti, örneğin:

  1. Access, formları ve raporları kullanarak uygulamalar oluşturabilen kart indeksleme sistemleriyle rahatça masaüstü kullanıcılarına yönelikti. SQL doğal bir eklemeydi. Bu, 'JET' adlı kendi yerel makine veritabanı motorunu kullandı. Sonunda JET kenara çekildi - üzüm asması üzerindeki kelime, (güvenilir) kaynak kontrolü eksikliğinin, kaynağın büyük bir kısmını kaybettikleri anlamına gelmesiydi.

  2. FoxPro, ilişkisel veriler üzerinde hız isteyen masaüstü kullanıcılarına yönelikti.

  3. SQL Server, işletmelerin ihtiyaç duyduğu tüm ölçek / güç / kullanılabilirlik vb. İle Kurumsal / Sunucu tarafı 'büyük' ​​veritabanı sistemiydi. IIRC, MS, Sybase 6'nın üzerine MSSQL'i kurmak için lisans verdi.

Zamanla, bazı sınırlar bulanıklaşmıştır - örneğin SQL Server artık bir masaüstü makinesinde çalışabilir, ancak kullanım durumu devam etmiştir.

Yani bu bize 3 'arka uç' veriyor - Microsoft tarafından üretilen veritabanı ürünleri.

Karışıma eklemek için, bu sistemlere erişmek için farklı düzeylerde geliştirici API'si sağlandı:

  1. Başlangıçta, API'lerin yolunda çok fazla şey yoktu - kodunuzu uygulamanın içine yazdınız (FoxPro / Access). VBA bir yöntemdi.

  2. Microsoft, Windows'un Oracle, Sybase, vb. Gibi büyük veritabanlarıyla konuşabilmesi için rakip sistemlere bağlanmak için MS ODBC'yi uyguladı. Excel, ODBC araçlarını almak için büyük uygulamalardan biriydi - büyük DB'nizden veri alma, işleme ve ürün çizelgeleri / veritabanı vb. Birçok veritabanı satıcısı, farklı istemcilerin bağlanmasına izin vermek için ODBC uyguladı ve bu strateji başarılı oldu. ODBC bir dereceye kadar en düşük ortak paydayı temsil edebilir.

  3. Farklı ekipler, o sırada en popüler MS geliştirici ürünü olan VB aracılığıyla erişilebilen yerel için DAO (Veri Erişim Nesneleri) ve uzaktan kumanda için RDO (Uzak Veri Nesneleri) gibi bir veritabanı motoruna erişmek için kendi yollarını üretmeye başladılar.

  4. Bu çeşitli API'leri rasyonelleştirmek ve tek / birleştirilmiş oldukça esnek bir veritabanı erişim API'si sağlamak için dahili bir çaba bize OLEDB verdi, ancak (C ++ şablonlarının bir sürü) içeri girmek çok zordu.

  5. OLEDB VB'den kullanılamadı, bu nedenle ADO ActiveX teknikleri kullanılarak geliştirildi, bu nedenle COM / OLE / ActiveX yapabilen herhangi bir şey tarafından yeniden kullanılabilir hale geldi, yani Access, Excel, VB ve böylece ASP veritabanı etkin hale geldi.

  6. .NET çağına geçtiğimizde, ADO doğal olarak çeşitli yararlar sağlayan bir .NET ortamına taşındı.

  7. LINQ'nun ortaya çıkmasıyla, gerçek veritabanı erişim mekanizması daha az sorun haline geldi.


Caveat - Bir süre önce ayrıldım, bu yüzden hafızam biraz bulanık


+1 DAO, RDO, ADO kısmının güzel açıklaması ama soru hala devam ediyor, model neden tekrarlandı?
Conrad Frix

Her zaman farklı MS departmanlarının kendi (NIH) teknolojilerini geliştirdiğini düşündüm. Kesinlikle çok sayıda var - ve EF yerine LINQ2SQL'i unuttun!
gbjbaanb

5

Adil olmak gerekirse, bahsettiklerin hepsi ADO.NET üzerine inşa edilmiştir. Bundan önce ADO bir süre için tercih edilen rotaydı, ancak DAO sadece Microsoft Access Veritabanları için yerel olduğu için takılmaya başladı. RDO varışta söyleyebileceğimden öldü.

Bahsettiğiniz tüm farklı çerçevelerle, sorunun herkes için bir çözüm vermeye ve diğer platformlarla rekabet etmeye çalıştıklarını düşünüyorum. Kodunuzda SQL kullanmanın basit bir yolunu istiyorsanız, System.Data için gidin. Entity Framework kullanarak bir ORM istiyorsanız. Aradaki bir şey için Enterprise Library Data'yı kullanın. Herkes farklı bir şey istiyor.

MS'in farklı gündemlere sahip farklı ekipleri olan çok büyük bir şirket olduğu konusu da var. Örneğin neden 3 kelimelik işlemcileri var (bildiğim).


bu. Herkese uyan tek bir kişi yok, bu yüzden tüm seçenekleri açık tutmaya çalışıyorlar.
stijn

2

Şahsen bunun daha çok Microsoft içindeki pazarlamanın etkisinin bir sonucu olduğunu düşünüyorum. Tüm haklara göre, bu teknolojilerin çoğu eski sürümlerin sürüm yükseltmeleri olarak kolayca piyasaya sürülebilir, ancak bir veri erişim katmanı kadar temel bir şeyi sürekli olarak yeniden keşfetme imajını koymak için büyük bir ihtiyaç var gibi görünüyor.



0

BT'nin doğası budur! DEĞİŞİKLİK! Java dünyasında aynı şeyleri vardı ... JDBC, EJB 1.0, EJB 2.0, Hibernate, EJB 3.0 vb.


1
Ben bir Java uzmanı değilim ama Hibernate Sun değil bu yüzden onun aradığım karşılaştırma değil. EJB, daha çok bir yazılım yığını olan veri erişiminden daha çok SOA hakkında görünüyor. Yazılım yığınları alıyorum. Aynı şeyi entegrasyon olmadan yapmanın birkaç farklı yolu, sopaların yaklaştığını görmek gibi görünüyor.
Conrad Frix
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.