Tüm Platformlar için Hızlı Uygulama Geliştirme --->    Kitabımız...      Delphi

Konuyu Paylaş : facebook gplus twitter

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.
While true do; Hayat döngüsü, kısır değildir! Yapılan bir yanlış, o döngünün dışına çıkmanızı sağlayacaktır.
WWW
Cevapla
#3
Json için önerebileceğim kütüphane X-SuperObject
Linkleri Görebilmeniz İçin Giriş yap veya Üye Ol
Yeni Nesil Yazılımcı
Linkedin: Linkleri Görebilmeniz İçin Giriş yap veya Üye Ol
Blog adresim: Linkleri Görebilmeniz İçin Giriş yap veya Üye Ol
WWW
Cevapla
#4
Linkleri Görebilmeniz İçin Giriş yap veya Üye Ol
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ı: Linkleri Görebilmeniz İçin Giriş yap veya Üye OlLinkleri Görebilmeniz İçin Giriş yap veya Üye Ol
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 Linkleri Görebilmeniz İçin Giriş yap veya Üye Ol
Bob Swart Linkleri Görebilmeniz İçin Giriş yap veya Üye Ol
Marco Cantu Linkleri Görebilmeniz İçin Giriş yap veya Üye Ol
Embarcadero Linkleri Görebilmeniz İçin Giriş yap veya Üye Ol
While true do; Hayat döngüsü, kısır değildir! Yapılan bir yanlış, o döngünün dışına çıkmanızı sağlayacaktır.
WWW
Cevapla
#6
Linkleri Görebilmeniz İçin Giriş yap veya Üye Ol 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ı: Linkleri Görebilmeniz İçin Giriş yap veya Üye OlEğ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 challanges 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

Konuyu Paylaş : facebook gplus twitter



Konu ile Alakalı Benzer Konular
Konular Yazar Yorumlar Okunma Son Yorum
  Delphi ile Json Parse İşlemi yhackup 11 682 18-02-2018, Saat: 14:33
Son Yorum: hakanharbeli
Question delphi 10.1'den 10.2' ye geçiş BY-HAYALET 10 174 18-02-2018, Saat: 12:33
Son Yorum: BY-HAYALET
  Delphi ile NVİ KPS (Kimlik Paylaşım Sistemi) web servislerine bağlanma. csunguray 9 314 07-02-2018, Saat: 13:30
Son Yorum: ismailkocacan
  Delphi Eval Hakkında narkotik 8 184 26-01-2018, Saat: 01:46
Son Yorum: narkotik
  Delphi Fonksiyonlar narkotik 6 212 15-01-2018, Saat: 23:32
Son Yorum: narkotik



Konuyu Okuyanlar: 1 Ziyaretçi