Şu anda kabul edilen kurumsal uygulama tasarım paradigmasının esası hakkında gerçekten dürüst ve düşünceli bir tartışma görmem gerekiyor .
Varlık nesnelerinin olması gerektiğine ikna olmadım.
Varlık nesneleri ile, "Kişi", "Hesap", "Sipariş" gibi uygulamalarımız için oluşturduğumuz tipik şeyleri kastediyorum.
Mevcut tasarım felsefem şudur:
- Tüm veritabanı erişimi saklı yordamlarla gerçekleştirilmelidir.
- Verilere ihtiyacınız olduğunda, saklı bir yordamı çağırın ve bir SqlDataReader'ı veya DataTable'daki satırları yineleyin
(Not: Java EE ile kurumsal uygulamalar da oluşturdum, java millet .NET örnekleri için eşdeğer yerine lütfen)
Ben anti-OO değilim. Varlıklar için değil, farklı amaçlar için birçok ders yazıyorum. Yazdığım sınıfların büyük bir bölümünün statik yardımcı sınıflar olduğunu kabul edeceğim.
Oyuncak yapmıyorum. Birden fazla makineye dağıtılan büyük, yüksek hacimli işlem uygulamalarından bahsediyorum. Web uygulamaları, windows hizmetleri, web hizmetleri, b2b etkileşimi, adını siz koyun.
OR Mappers kullandım. Birkaç tane yazdım. Java EE yığınını, CSLA'yı ve diğer birkaç eşdeğeri kullandım. Sadece bunları kullanmakla kalmadım, aynı zamanda bu uygulamaları üretim ortamlarında aktif olarak geliştirdim ve sürdürdüm.
Varlık nesnelerinin yolumuza girdiği savaşta test edilmiş bir sonuca vardım ve onlar olmadan hayatlarımız çok daha kolay olurdu .
Bu basit örneği göz önünde bulundurun: Uygulamanızda düzgün çalışmayan belirli bir sayfa hakkında bir destek çağrısı alırsınız, belki alanlardan biri olması gerektiği gibi kalıcı değildir. Modelimle, sorunu bulmak için atanan geliştirici tam olarak 3 dosya açar . Bir ASPX, bir ASPX.CS ve saklı yordam içeren bir SQL dosyası. Saklı yordam çağrısı için eksik bir parametre olabilecek sorunun çözülmesi birkaç dakika sürebilir. Ancak herhangi bir varlık modelinde, her zaman hata ayıklayıcıyı tetikleyecek, kodla adım atmaya başlayacaksınız ve sonunda Visual Studio'da 15-20 dosya açabilirsiniz. Yığının en altına inene kadar, nereden başladığınızı unuttun. Bir seferde sadece birçok şeyi kafamızda tutabiliriz. Yazılım, gereksiz katmanlar eklemeden inanılmaz derecede karmaşıktır.
Geliştirme karmaşıklığı ve sorun giderme, sorunumun sadece bir tarafı.
Şimdi ölçeklenebilirlik hakkında konuşalım.
Geliştiriciler, veritabanıyla etkileşime giren herhangi bir kodu her yazdıklarında veya değiştirdiklerinde, veritabanı üzerindeki tam etkiyi kapsamlı bir şekilde analiz etmeleri gerektiğini fark ederler mi? Ve sadece geliştirme kopyası değil, yani üretimin bir taklidi, yani nesneniz için şimdi ihtiyacınız olan ek sütunun sadece mevcut sorgu planını geçersiz kıldığını ve 1 saniyede çalışan bir raporun 2 dakika sürdüğünü görebilirsiniz. çünkü seçim listesine tek bir sütun eklediniz mi? Ve şimdi ihtiyacınız olan dizin o kadar büyük ki DBA dosyalarınızın fiziksel düzenini değiştirmek zorunda kalacak?
İnsanların fiziksel veri deposundan soyutlama ile çok uzaklaşmasına izin verirseniz, ölçeklenmesi gereken bir uygulama ile tahribat yaratacaktır.
Ben bir gayret değilim. Linq to Sql, ADO.NET EF, Hibernate, Java EE, vb.'ye doğru güçlü bir itiş olduğu için yanılıyorsam ikna olabilirim ve belki de öyleyim. gerçekten ne olduğunu ve neden düşüncemi değiştirmem gerektiğini bilmek istiyorum.
[Düzenle]
Bu soru aniden tekrar aktif gibi görünüyor, bu yüzden şimdi doğrudan birkaç cevap üzerine yorum yaptığım yeni yorum özelliğine sahibiz. Cevaplar için teşekkürler, bunun sağlıklı bir tartışma olduğunu düşünüyorum.
Muhtemelen kurumsal uygulamalardan bahsettiğimden daha açık olmalıydım. Birisinin masaüstünde veya mobil bir uygulamada çalışan bir oyun hakkında gerçekten yorum yapamam.
Birkaç benzer cevaba yanıt olarak burada en üste koymam gereken bir şey var: diklik ve endişelerin ayrılması genellikle varlık / ORM'ye gitme nedenleri olarak belirtilir. Saklı yordamlar, benim için düşünebileceğim endişelerin ayrılmasının en iyi örneğidir. Saklı yordamlar dışında veritabanına diğer tüm erişimlere izin vermezseniz, saklı yordamların giriş ve çıkışlarını koruduğunuz sürece teorik olarak tüm veri modelinizi yeniden tasarlayabilir ve herhangi bir kodu kıramazsınız. Onlar sözleşme ile programlama mükemmel bir örnektir (sadece "seçin *" önlemek ve sonuç kümelerini belgelemek sürece).
Uzun süredir sektörde olan ve uzun ömürlü uygulamalarla çalışan birine sorun: bir veritabanı yaşarken kaç uygulama ve kullanıcı arayüzü katmanı geldi ve gitti? Veri elde etmek için SQL üreten 4 veya 5 farklı kalıcılık katmanı olduğunda bir veritabanını ayarlamak ve yeniden düzenlemek ne kadar zor? Hiçbir şeyi değiştiremezsiniz! ORM'ler veya SQL üreten herhangi bir kod, veritabanınızı taş olarak kilitler .