Konuyu Oyla:
  • Derecelendirme: 5/5 - 1 oy
  • 1
  • 2
  • 3
  • 4
  • 5
3 Katmanlı mimari/Delphi
#1
Question 
Merhaba arkadaşlar,

Delphi ile 3 katmanlı mimari kullanımı öğrenmek için nereden başlamalıyım.

Hangi componentler kullanılıyor,
XML/JSON hangisini kullanmalı,
temel olarak client/server uygulamalarından farkı nedir,
resim,belge v.s xml/json ile aktarılabiliyormu.
Hız olarak client/server dan hızlımı?

“Do. Or do not. There is no try.”
Cevapla
#2
Merhaba,
Üç katmanlı mimariden ziyade, yapacağınız gereksinim analizine göre ihtiyacınız olan Multi-Tier (birden fazla katmanlı mimari) yapıyı belirlemelisiniz.
Multi-Tier mimarilerinin tümü temelde Client - Server yapısındadırlar.
Çünkü asıl verilerin barındığı bir sunucu ve farklı cihaz veya kullanıcıların isteklerini sağlayan bir istemci sistemi vardır.
Bunların en başında (Embarcadero'nun göz bebeği) DataSnap gelmektedir.  
Veri iletişim protokolü ve yapısı konusunda kuşkusuz en doğru yöntemlerden biri JSON'dur.
JSON veriyi bir metinsel yapıda gönderir/alır, biçimsel olarak Obje yapılarına benzer, Delphi ile kolayca anlamlandırılabilir. (System.JSON ve REST.JSON)
Binary (her tür dosyayı) destekler.

Component olarak;
JSON için doğrudan System.JSON ve REST.JSON kullanılabilir,
DataSet bileşenlerinden FireDAC için TFDJSONDataSets, TFDJSONDataSetsWriter/TFDJSONDataSetsReader, TFDStanStorageJSONLink gibi sınıf yapıları kullanılabilir,
DataSnap için ise Indy ve Remobjects SDK kullanılabilir.
Cevapla
#3
Json için önerebileceğim kütüphane X-SuperObject
https://github.com/onryldz/x-superobject
Yeni Nesil Yazılımcı
Linkedin: https://tr.linkedin.com/in/barisatalay07
WWW
Cevapla
#4
https://www.youtube.com/user/DelphiUniversity/videos
Buradaki linkten başladım farklı kaynak önerilerine açığım pdf olur video olur.

“Do. Or do not. There is no try.”
Cevapla
#5
(20-12-2016, Saat: 13:20)masteryoda Adlı Kullanıcıdan Alıntı: https://www.youtube.com/user/DelphiUniversity/videos
Buradaki linkten başladım farklı kaynak önerilerine açığım pdf olur video olur.

Aşağıda paylaşmış olduğum linkler DataSnap mimarisinin temellerini anlatan özet niteliğinde PDF'lerdir.
Bob Swart DataSnap in Action
Bob Swart White Paper - Delphi 2010 DataSnap: Your data - where you want it, how you want it
Marco Cantu REST Servers in Delphi XE Using DataSnap
Embarcadero White Paper: The New DataSnap in Delphi 2009
Cevapla
#6
Linkteki bilgiler ışığında DataSnap'ın performans durumu nedir, iddia edildiği gibi rakiplerinin fersah fersah gerisinde/uzağında mıdır? Sizlerin yorum ve özellikle tecrübeleriniz nedir?

requests_per_second_01.png

memory_consumption_01.png?w=1008
Cevapla
#7
Merhaba,

Çok katmanlı mimariler Sunucu - İstemci mimarisinden farklıdır. Her katmanın kendisine ait bir görevi vardır. Çok kabaca söyleyecek olursak aşağıdaki gibi bir yapı olur:

1. Veri katmanı: Burası verinin tutulduğu yerdir. Tahmin edebileceğiniz gibi genelde bir ilişkisel veri tabanı sistemi kullanılır. SQL Server, MySQL vs gibi. Bunu basit bir veri tabanı olarak düşünmeyin, çünkü bu katmanı da siz programlıyorsunuz. Yani buraya elle de yanlış kayıt girilememeli. Ayrıca illa ilişkisel veri tabanı olmak zorunda değil, hiyerarşik ve NoSQL veri tabanı da olabilir. 

2. Business Logic katmanı: Bütün iş kurallarının yazıldığı katmandır. Bu kısımda bütün kurallar kontrol edilir. Örneğin istemci basit bir emir verir: Kasadan x carisine y TL öde. Bu katman, bütün yetkiler ve kuralları kontrol eder, önce kasadan çıkış hareketi yapar, sonra cariye giriş hareketi yapar ve sonucu istemciye bildirir. Dikkat edecek olursanız istemci sadece kasadan para öde emri verdi. Verinin nasıl tutulduğunu, hangi işlemlerin yapıldığını, hangi yetkiler ve kurallar olduğunu söylemedi.

3. İstemci katmanı: Son kullanıcı tarafından kullanılan programdır. Kimi durumlarda ara yüz tasarımları bile Business Logic katmanından gelir. Herhangi bir kural yazmanız gerekmez. Örneğin fatura numarası girmeden fatura kaydı yapılamaz dediniz. Kullanıcı yeni bir fatura girerken bu katman fatura no girilmiş mi diye kontrol etmez. Etmesine gerek yok, çünkü bunu Business logic katmanı kontrol edecek (ve hatta aslında etmemeli).

Katman sayısı çok daha fazla olabilir. Örneğin programı 10.000 kişi aynı anda kullanacak diyelim. O zaman business katmanı birden fazla bilgisayara kurulur, araya bir katman daha eklenir (Load & Balance), istemci bu katmana bağlanır, bu katman da en az işi olan business logic katmanına aktarır. 

Çok katmanlı mimarileri Model - View - Controller ile karıştırmayın. MVC, bir proje içinde yapılan bir tasarlamadır. Çok katmanlı mimarilerde fiziksel olarak da farklı konumlar kullanılabilir. Örneğin veri katmanı İstanbul'da, business logic katmanı İzmir'de, istemci katmanı ise mobil uygulama, Windows uygulama veya web sitesi olabilir.

Çok katmanlı mimarileri tasarlaması da, kodlaması da zordur. Özellikle business logic ile istemci katmanları sık sık birbirine karıştırılır ve programcılar bazen kuralları istemciye yazar (farkında olmadan ve/veya client/server mimarinin getirdiği alışkanlıktan). 

Peki Delphi bunun neresinde? Delphi ile her katman için bir şeyler yapabilirsiniz. Bunun için kendi kütüphaneleri de var (Datasnap gibi). Bana soracak olursanız Datasnap iyi bir fikir değil. Eğer Datasnap kullanıyorsanız istemcileriniz de Delphi ile yazılmalı ki Danasnap'in avantajlarını kullanabilesiniz. Ama bu da bizim istemci katmanını kısıtlıyor. Bunun yerine standart web hizmetlerini (SOAP) veya Datasnap'ten bağımsız REST sunucu yapabilirsiniz. Her ikisinin de iyi ve kötü yanları vardır. Hangisinin seçileceği de projeye göre değişecektir. Eğer çok iddialı iseniz bunlardan farklı olarak kendi protokolünüzü de yazabilirsiniz. Sonuçta yapılan işlem basittir: TCP/IP protokolü ile iki program arasında veri alışverişi. Bunu sohbet programı yazmaktan bir farkı yoktur. Yani her türlü veri (buna resim, müzik gibi binary dosyalar da dahil) gönderip alabilirsiniz. Bu arada başka kütüphaneler de var. Örneğin mORMot, KbmMW gibi. Remote Objects firmasının da ürünleri var, ama o Delphi.NET kullanıyor sanırım.

Katmanların nasıl çalışacağı katı kurallara bağlı değildir. Örneğin bazı kimseler bütün kuralların veri tabanı katmanına yazılması gerektiğini düşünür. Ama siz projeye göre farklı hareket edebilirsiniz.

Çok katmanlı mimariler, Client/Server mimarilere göre yavaştır. Araya giren her katman da sistemi biraz daha yavaşlatır. Bu mimari hızı değil, veri güvenliği, sistem güvenliği, yük ve denge, kuralların yönetilmesi gibi farklı konuları ön plana çıkarır. 

Benim tavsiyem işe SOAP sunucu ile başlamanızdır. Delphi'de bunun bir sihirbazı da var. Bence VCL Application seçin (debug etmesi kolay olur), mimarinin mantığını kavrayın. Gerisi zaten yavaş yavaş gelecektir.

İyi çalışmalar
Cevapla
#8
bende kendime özel bir katman oluşturum ne kadar doğru yapıyorum bilmiyorum bu konuda fikir verebilirseniz iyi olur ufak veri alışverişi için IdTCPServer kullanıyorum yaklaşık 50 karakter veriler için daha fazlası için SOAP üzerinden olsa iyi olur diye düşüyorum.
aynı procede ikisinde kullanmak ne kadar mantıklı, IdTCPServer bir tık daha hızlı gibi geliyor ama yüklü verilerde hata verebiliyor. yoğun trafik alırsa dayanabilir mi bilmiyorum.
Cevapla
#9
(21-12-2016, Saat: 13:02)Bahadir.Alkac Adlı Kullanıcıdan Alıntı: Eğer Datasnap kullanıyorsanız istemcileriniz de Delphi ile yazılmalı ki Danasnap'in avantajlarını kullanabilesiniz.
istemcilerin delphi ile yazılmalı kısmını anlayamadım.
One of the major software engineering challenges is managing change.
Cevapla
#10
Alıntı:istemcilerin delphi ile yazılmalı kısmını anlayamadım.

Datasnap kullandığınız takdirde sunucu/istemci arasında ClientDataSet gönderebiliyorsunuz. Yani aslında çok katmanlı mimariyi, Client/Server gibi programlayabiliyorsunuz. Bu da Rapid Application Development için inanılmaz bir pratiklik. Ama ClientDataSet gönderdiğiniz fonksiyon (procedure) .NET veya Java istemcisinde çalışmaz, çünkü ClientDataSet diye bir şey .NET veya JAVA'da yok. Dolayısıyla onlar için farklı bir fonksiyon yazmanız gerekir. Buradan çıkacak sonuç ise şu: Eğer bütün istemciler Delphi olacaksa Datasnap iyi bir fikir olabilir (elbette başka kriterler de var), ama farklı programlama dillerinde de istemci yazılacaksa o zaman Datasnap yerine SOAP/REST gibi standart bir sistem kurmak daha iyi bir fikir olabilir.

Alıntı:bende kendime özel bir katman oluşturum ne kadar doğru yapıyorum bilmiyorum bu konuda fikir verebilirseniz iyi olur ufak veri alışverişi için IdTCPServer kullanıyorum yaklaşık 50 karakter veriler için daha fazlası için SOAP üzerinden olsa iyi olur diye düşüyorum.

aynı procede ikisinde kullanmak ne kadar mantıklı, IdTCPServer bir tık daha hızlı gibi geliyor ama yüklü verilerde hata verebiliyor. yoğun trafik alırsa dayanabilir mi bilmiyorum.
İlk kez çok katmanlı mimarilerle uğraşıyorsanız kendi protokolünüz iyi bir fikir değil. Çok fazla ilgilenmeniz gereken detay var. Örneğin sunucuda port açmanız gerekecek (sunucu politikaları gereği sorun çıkabilir), sunucunun multithreaded çalışmasını siz yöneteceksiniz, fonksiyon yönlendirmesini ve parametrelerini siz yapacaksınız, güvenliği siz sağlayacaksanız ve buna benzer bir sürü ek sorun çıkacak. Bunun yerine işe basit bir SOAP web sunucusu ile başlayın. 

İyi çalışmalar
Cevapla


Konu ile Alakalı Benzer Konular
Konular Yazar Yorumlar Okunma Son Yorum
  delphi 10.4 deutsch1988 0 56 Dün, Saat: 11:46
Son Yorum: deutsch1988
  Delphi virus gibi deutsch1988 11 468 12-04-2024, Saat: 17:36
Son Yorum: deutsch1988
  Delphi 7 Unrar mcuyan 12 668 19-03-2024, Saat: 10:30
Son Yorum: frmman
Lightbulb Delphi 7zip Password lü Dosya Sıkıştırma ve Açma + Bonus RAR5 Desteği frmman 6 318 16-03-2024, Saat: 17:55
Son Yorum: delphi.developer
  delphi 12 ile TFileStream çalışmıyor aegean 5 525 05-03-2024, Saat: 22:23
Son Yorum: aegean



Konuyu Okuyanlar: 1 Ziyaretçi