Saklı yordamlar üç aşamalı ayrımı ihlal ediyor mu?


41

Bazı meslektaşlarım, veritabanındaki saklı yordamlarda iş mantığına sahip olmanın, üç katmanlı ayırma mimarisini ihlal ettiğini, çünkü veritabanının veri katmanına ait olduğunu ve saklı yordamların da iş mantığı olduğunu söylediler.

Bence dünya, saklı yordamlar olmadan çok acımasız bir yer olurdu.

Gerçekten üç aşamalı ayrılığı ihlal ediyorlar mı?


8
Onlara 3 1/2 katlı mimariyi
duymadıklarını sorun

7
Unutma ki katmanlar ve katmanlar aynı değil.
NoChance

2
@ emmad-kareem Bu soru bana yardımcı oldu ( stackoverflow.com/questions/120438/… ). Sorun şu ki, ispanyolca (anadilim) dili teknik edebiyatı bunun için tek bir kelime kullanıyor ("çapa");
Tulains Córdova

1
@ user1598390, yazılım dünyasının, diller arasında tek başına tek bir dilde tanımlamalar söz konusu olduğunda yeterince titiz olmadığının özellikle kafa karıştırıcı olabileceği konusunda haklısınız.
NoChance

1
3-Katman mimarisi, fiziksel bir kavram değil, mantıksal bir kavramdır. Saklı yordamları kullanarak iş kurallarını uygulayabilirsiniz ve fiziksel olarak veritabanındayken saklı yordamlar hala iş mantığı katmanının bir parçasıdır.
Craig

Yanıtlar:


32

Meslektaşlarınız mimarlığı uygulamayla birleştiriyor.

Çok katmanlı bir uygulamanın arkasındaki fikir basitçe belirli işlem türlerini (depolama, iş mantığı, sunum) içeren ve iyi tanımlanmış arayüzleri kullanarak birbirleriyle iletişim kuran parçalara bölünmesidir. Nesne yönelimli programlamaya benzeyen şeyleri nesne yönelimli olmayan dillerde başarılı bir şekilde yapabilmek gibi, aynı şeyi veritabanı sunucusu gibi bir ortamda birden çok katmanla da yapmak mümkündür. Bunlardan birini başarılı bir şekilde ortak yapmak, bakım, disiplin ve ilgili uzlaşmaların anlaşılması için bir ihtiyaçtır.

İki aşamanın veritabanına uygulandığı üç katmanlı bir uygulamaya bakalım:

  • Veri katman: dört standart tablo işlemleri kullanılarak erişilir veritabanı tablolarının oluşur ( INSERT, UPDATE, DELETEve SELECT).
  • Mantıksal Katman: Yalnızca iş mantığını uygulayan ve yalnızca yukarıda belirtilen yöntemleri kullanarak veri katmanına erişen depolanmış prosedürlerden oluşur.
  • Sunum Katmanı: Yalnızca saklı yordam çağrıları yaparak mantık katmanına erişen kod çalıştıran bir web sunucusundan oluşur.

Bu mükemmel bir şekilde kabul edilebilir bir model, ancak bazı değişimlerle birlikte geliyor. İş mantığı, veri katmanına hızlı ve kolay erişilmesini sağlayacak ve veritabanının dışındaki bir mantık katmanı tarafından "zor yoldan" yapılması gereken şeylerin yapılmasına izin verecek şekilde uygulanmaktadır. Vazgeçtiğiniz şey, bir başka teknolojiye ve kaygısız uygulamaya kolayca katılabilme yeteneğidir (yani, katmanların veritabanında bulunan tesisleri ancak tanımlanmış arayüzlerinin dışında kullanmamalarına dikkat etmeniz gerekir). .

Belirli bir durumda bu tür bir şey ve getirdiği travmalar kabul edilebilir olup olmadığı, sizin ve meslektaşlarınızın kararınızı kullanarak belirlemeniz gereken bir şeydir.


2
Yani onları saklı yordamlar, veritabanında saklı olmalarına bakılmaksızın, mimarlık açısından mantık katmanının bir parçası olabilir mi?
Tulains Córdova

3
@ user1598390: evet. Her ne kadar 3 katmanlı, 3 katmanlı değil.
jmoreno

4
@ user1598390: Bunu kanıtlayabildiğiniz sürece söyleyebilirsiniz. Sunum katmanı SELECTdoğrudan tablolardan ilk kez çıktığında (veri katmanı) model bozuldu.
Blrfl

@blrfl Bu benim ilgilendiğim bir şey;)
Tulains Córdova 22:12

2
@ user1598390: sorun değil, sadece amacın farklı donanımlara bir şeyler koymak değil, endişelerin mantıksal olarak ayrılması olduğunu unutmayın.
jmoreno

19

Saklı yordamlar, iş mantığını RDBMS katmanına getirerek üç aşamalı ayrım ihlalini kodlamanıza izin verecek kadar güçlüdür. Ancak, bu sizin kararınızdır, saklı işlemlerin doğal bir kusuru değildir. SP'lerinizi veri katmanınızın gereksinimlerini karşılamakla sınırlandırırken, uygulama mantığınızı mimarinizin uygulama katmanında tutar.

İş mantığını içermek için saklı yordamlara (özellikle bir grup tetikleyici) ihtiyaç duyduğunuzda, ayırma kuralının nadir fakat önemli bir istisnası vardır. Bu, uygulamanızın milyonlarca satıra dokunan çok sayıda anında veri toplaması oluşturması gerektiğinde gerçekleşir. Bu gibi durumlarda, iş katmanının kullanımı için önceden toplanmış verileri korumak için tetikleyiciler ayarlanabilir. Bu, yalnızca toplamadan önce uygulamanızın kabul edilemez derecede yavaş olacağı durumlarda yapılmalıdır.


7
Bir RDBMS genel olarak işlem kodlarını uygulama kodunuzdan daha hızlı ayarlayacağından, bazen performans nedenleriyle veritabanında bazı mantıkları kullanmak istediğinizi belirttiğiniz için +1. Açıkçası, bu yalnızca performans kritik olduğunda ve uygulama kodunda karşılanamadığında, modern veritabanı destekli uygulamaların büyük çoğunluğu CRUD uygulamalarıdır ve bu avantajlardan faydalanamayacaklardır.
Jimmy Hoffa,

1
Amin. İnsanlar sprocs = business "code" olduğunu düşünüyor. Bir DB 'API' olarak düşünülmeli ve daha sonra çok daha anlamlı hale gelmelidir. Tabii ki, aynı zamanda mantığınızdaki performansa ihtiyaç duyduğunuz son durumları da çözebilir!
gbjbaanb

5

Atwood’un 2004’teki tavsiyesi bugün hala doğru, sadece biz de ORM’nin faydası var.

http://blog.codinghorror.com/who-needs-stored-procedures-anyways/

Saklı yordamlar veritabanı derleme dili olarak düşünülmelidir: yalnızca en kritik performans durumlarında kullanmak için. Saklı Prosedürlere başvurmadan sağlam, yüksek performanslı bir veri erişim katmanı tasarlamanın birçok yolu vardır; parametreli hale getirilmiş SQL ve tek bir uyumlu geliştirme ortamı ile bağlı kalırsanız, birçok avantaj elde edersiniz.


Büyük bir şirketteki 20 yıllık deneyimimde saklı yordamlar satırları döndürmek için kullanılmıyor (görünümler bunun için kullanılıyor) ya da her basit kesici uç veya güncelleme için kullanılmıyor (bunun için satır içi sql kullanılıyor). Çoğunlukla, kullanıcı etkileşimi gerektirmeyen uzun işlemler için kullanılır; bazı iş mantığına dayalı olarak, satır sonu kapanışları veya günlük işlemlerin günlük işlenmesi gibi satır bazında ekler veya güncellemeler yapmak için büyük veri setlerinin yinelenmesini gerektirir. . Makalenin yazarı, satırları döndürmek için saklı yordamları kullanıyor gibi görünüyor ve bu yüzden onları ısıtıyor.
Tulains Córdova

3

Kısa Özet: Bu, gerçekten saklı yordamları ve iş gereksinimlerini kullanımınıza bağlıdır.

Üç katmanlı bir mimari kullanan birkaç proje vardır ve iş gereksinimlerinin niteliğine bağlı olarak bazı işlemleri bir veri katmanına kaydırmanız gerekebilir .

Terminoloji hakkında konuşmak, genel olarak şu sözler şöyle tanımlanır:

  • Sunum katmanı veya kullanıcı hizmetleri katmanı - kullanıcıya uygulamaya erişim izni verir.
  • Orta seviye veya işletme hizmetleri katmanı - işletme ve veri kurallarından oluşur.
  • Veri katmanı veya veri hizmetleri katmanı - genellikle bir veritabanında veya kalıcı depolamada saklanan kalıcı verilerle etkileşime girer.

Genellikle verilen mimari için, orta seviye veya iş hizmetleri katmanı, iş ve veri kurallarından oluşur. Bununla birlikte, bazen, veri kümesinde saklanan prosedürler kümesinde yapılması gereken ağır set temel işlemlerinin ve / veya veri kurallarının kaydırılması büyük fark yaratır .

Üç katmanlı tasarımların faydaları:

Bir uygulamanın yaşam döngüsü boyunca, üç aşamalı yaklaşım yeniden kullanılabilirlik, esneklik, yönetilebilirlik, bakım yapılabilirlik ve ölçeklenebilirlik gibi faydalar sağlar. Oluşturduğunuz bileşenleri ve hizmetleri paylaşabilir ve yeniden kullanabilir ve gerektiğinde bunları bir bilgisayar ağında dağıtabilirsiniz. Büyük ve karmaşık projeleri daha basit projelere bölebilir ve farklı programcılara veya programlama ekiplerine atayabilirsiniz. Ayrıca, değişiklikleri izlemeye yardımcı olmak için bileşenleri ve hizmetleri bir sunucuya dağıtabilirsiniz ve bunları uygulamanın kullanıcı tabanı, veri ve işlem hacmi arttıkça yeniden dağıtabilirsiniz.

Bu nedenle, aslında kendi içinde dengeleri olan bir vaka temelli yaklaşımdır. Ancak, Üç Katmanlı Mimari Modelin Microsoft tasarım kuralları, iş mantığınızı orta katmanda tutmanızı önerir .


2

Katman aslında farklı makine, katman ise farklı mantıksal ayrım anlamına gelir. Saklı yordamlarla aynı katmandaki veri katmanına ve (en azından bir kısmına) iş mantığı katmanına sahip olursunuz. İş mantığını saklı yordamlara sokmak 3 yorgun mimariyi ihlal ediyor, ancak 3 katmanlı mimariyi ihlal edip etmediğini sorgulamakta; Kesin olan bir şey, kesinlikle endişelerin ayrılmasının iyi bir örneği olmadığıdır.

Katman, yazılım çözümünüzü oluşturan öğeler için mantıksal bir yapılandırma mekanizmasıdır; seviye, sistem altyapısı için fiziksel bir yapılanma mekanizmasıdır. ( Referans )

Kanımca veritabanında iş mantığı oluşturmanın iki ana sorunu var:

  1. Kod ve kütüphaneler: SQL, PL / SQL, TSQL vb. Programlarda C #, Java vb. Programlarda programlayabileceğiniz daha az programcı bulacaksınız.

  2. Yatay ölçeklenebilirlik: Sisteminizi ölçeklendirmenin tek yolu, veritabanının bulunduğu güçlü sunucuyu daha güçlü olana göre değiştirmektir (oldukça pahalı olan (64 GB RAM'e sahip bir sunucu)); ilişkisel veritabanları yatay olarak çok kötü ölçeklendirir ve hatta daha büyük masraflarla. OO yerleşik sunucusundaki iş mantığıyla, sunucuyu birçok düğüme yerleştirerek yatay olarak oldukça iyi ölçeklendirebilirsiniz (Java'da birçok uygulama sunucusu bunu destekler).


-1

Bu tartışmayı bazı zamanlar ofisimizde yaptık, Veri Tabanı Geliştirmeyi destekliyordum

  1. Oracle Database kullanıyorsanız, PL / SQL'i mümkün olduğunca kullanmalısınız, çünkü yatırım yapan şirketler bundan sonra 10 yıl boyunca bile olsa kehanete sadık kalacaklar. Dün yapılan uygulamalarda Oracle Forms kullanıyorsanız, bugün .net Web formları, sonra MVC, sonra yarın angularjs kullanacak ve sadece apislere ihtiyacınız olacak. Eğer maksimum mantık veri tabanında bulunuyorsa, kolayca yeni ön uç teknolojilere geçebilirsiniz.
  2. Veri tabanı geliştirme çok hızlı ve çok verimli bir performans. Sadece sana bir şans vermek için. Projemizde 7 uygulama geliştiricisi ve bir veritabanı geliştiricisi vardı ve mantığın% 80'i veritabanındaydı.
  3. Oracle kullanıyorsanız, veritabanı işlemlerinizi doğrudan Res full Api'ye dönüştürmek için yardımcı programları kullanabilirsiniz.

Uygulama geliştiricilerinin, iş mantığının veritabanından bağımsız olması gerektiği konusundaki en güçlü argümanı, veritabanını kolayca değiştirebilmenizdir. Bir firmanın kehanet kullanıyor olması durumunda neden eski teknolojiye geçeceklerini, bunun yerine uygulama mantığını eski haline getirme şansının daha fazla olacağını düşünüyorum. Sorun çoğunlukla veritabanı kaynaklarının yeni yeteneklerinin bulunmaması, çoğunlukla erkekler başlarsa mysql veya sqlserver kullandıkları basit web siteleri olacaktır. Bu adamlar daha sonra kıdemli liderler haline gelir ve uygulama katmanıyla duygusal bağ kurarlar :) hatta anlamak veya tartışmak istemezler.


“Oracle Database kullanıyorsanız, mümkün olduğunca PL / SQL kullanmalısınız,” Saklı prosedürler bir mimaride tipik olarak en çok şişe boyunlu ve ölçeklendirilmesi zor olan sisteme yük ekler. Ayrıca sürüm kontrolü ve ünite testi açısından da başa çıkmaları gereken bir acı. "Çünkü yatırım yapan şirketler bundan böyle 10 yıl bile olsa kehanete sadık kalacaklar." Bu sadece saçmalık. Bunu düşündüren ne? Sisteminizi aptal PL / SQL prosedürel çöpleriyle doldurursanız, bir şirketin çağdaş bir şeye geçmesini önleyebilirsiniz. Bu doğru olabilir.
JimmyJames,
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.