Tüm veri erişimi için yalnızca saklı yordamları kullanan bir şirkette çalışıyorum; bu, yerel veritabanlarımızı yeni işlemler yürütmemiz gerektiğinden, senkronize tutmamızı çok sinirlendirmektedir. Geçmişte bazı temel ORM'leri kullandım ve deneyimi daha iyi ve daha temiz buluyorum. Geliştirme yöneticisine ve ekibin geri kalanına, gelecekteki gelişim için bir tür ORM kullanmayı düşündüğümüzü söylemek isterim (ekibin geri kalanı yalnızca saklı prosedürlere aşina ve hiç bir şey kullanmadı). Şu anki mimari, .NET 1.1 gibi yazılmış ve ActiveRecord'un garip bir uygulamasını kullanan ve kodların arkasındaki dosyalara aktarılan türlenmemiş DataSet'leri döndüren "tanrı sınıfları" ile yazılmış .NET 3.5'tir - sınıflar şöyle çalışır:
class Foo {
public bool LoadFoo() {
bool blnResult = false;
if (this.FooID == 0) {
throw new Exception("FooID must be set before calling this method.");
}
DataSet ds = // ... call to Sproc
if (ds.Tables[0].Rows.Count > 0) {
foo.FooName = ds.Tables[0].Rows[0]["FooName"].ToString();
// other properties set
blnResult = true;
}
return blnResult;
}
}
// Consumer
Foo foo = new Foo();
foo.FooID = 1234;
foo.LoadFoo();
// do stuff with foo...
Herhangi bir tasarım deseninin hemen hemen hiçbir uygulaması yoktur. Herhangi bir test yoktur (başka hiç kimse birim testlerini nasıl yazacağını bilemez ve testler web sitesini manuel olarak yüklemek ve dolaşmak yoluyla yapılır). Veritabanımıza baktığımızda: 199 tablo, 13 görüntü, bir toplam 926 saklı yordam ve 93 işlev. Toplu işler veya harici şeyler için yaklaşık 30 kadar tablo kullanılır, geri kalanı çekirdek uygulamamızda kullanılır.
Bu senaryoda farklı bir yaklaşım izlemeye bile değer mi? Yalnızca "çalıştığından" beri mevcut kodu yeniden düzenlememize izin vermediğimizden ileriye taşınmaktan bahsediyorum, bu nedenle mevcut sınıfları ORM kullanmak için değiştiremeyiz, ancak bunun yerine ne kadar sıklıkla yeni modüller eklediğimizi bilmiyorum mevcut modüllere ekleme / sabitleme olduğundan, bir ORM'nin doğru yaklaşım olup olmadığından emin değilim (saklı yordamlara ve DataSet'lere çok fazla yatırım yapılır). Doğru seçim ise, birini kullanmak için vakayı nasıl sunmalıyım? Kafamın tepesinde, düşünebildiğim tek fayda, daha temiz kodlara sahip olmak (mevcut mimaride olmadığı için olmasa da) ORM'leri göz önünde bulundurarak temelde gelecekteki modüllere jant donanımı olan ORM'leri oluşturacağız, ancak eskileri hala DataSet'i kullanıyor olacaktı) ve hangi prosedür komut dosyalarının çalıştırıldığını ve hangilerinin çalıştırılması gerektiğini hatırlamak için daha az güçlük çekti. ama bu kadar ve ne kadar zorlayıcı bir tartışma olacağını nasıl bilemiyorum. Sürdürülebilirlik bir başka endişe ancak benden başka kimsenin endişelenmediği bir konu.