Delphi Can
Delphi ORM Yapısı ile işlevsel kod çıktısı oluşturma - Baskı Önizleme

+- Delphi Can (https://www.delphican.com)
+-- Forum: Delphi (https://www.delphican.com/forumdisplay.php?fid=3)
+--- Forum: Access violation (https://www.delphican.com/forumdisplay.php?fid=136)
+--- Konu Başlığı: Delphi ORM Yapısı ile işlevsel kod çıktısı oluşturma (/showthread.php?tid=1342)



Delphi ORM Yapısı ile işlevsel kod çıktısı oluşturma - Abdullah ILGAZ - 18-09-2017

Merhaba,

Bu konu aslında tam bir soruyu kapsamıyor. Bu yüzden cevaplarınızın beyin fırtınasının bir parçası olması adına mümkün olduğu kadar geniş ve kapsamlı olmasına dikkat ederseniz sevinirim.

Konumuz başlıktan okuduğunuz üzere ORM Yapısına uygun ve bu şekilde oluşturulan proje çıktıları. Her proje için belirli tablolar ve aynı konseptte oluşan yapılar çıkıyor. Ancak her bir projede bunların konumları ve adlandırmaları değiştiği için ya aynı tabloların create-script dosyalarını alıp revize ediliyor, yada manuel düzenlemeler yapılıyor.

ORM yapısına bir yenilik kazandırarak, benzer konseptte olan ancak farklı adlandırılan projelerin tek kod ve tek veritabanı yapısı ile işlevselliğini arttırmak. Bunu nasıl yapmayı planladığıma gelirsek; her projemizde tanımlarımızı tutacağımız tablolar, hareketlerimizi tutacağımız tablolar ve ilişkilerini yöneteceğimiz tablolar oluşturuyoruz.

Yani; Kullanıcı, İş, Ürün, Müşteri ve Satış olarak toplamda 4-5 tablo grubu ile işimizi çözüyoruz. Her ORM projesinde oluşturulan modeller ve veritabanı tabloları isimlendirme dışında çok ufak tablo yapısında değişikliğe sürüklüyor bizleri. Peki bu işin temelinde olan bu 4-5 tabloyu sistematik olarak ORM'ye göre tasarlasak, özelleştirmemiz gereken sütunları da hesaba katarak her tabloda ek alanlar oluştursak, sonra da vt tablolarının isimleri her projede aynı kalacağı halde kullanıcı arayüzünde isimlendirmeleri istediğimiz gibi şekillendirsek nasıl olur?

Konu ile ilgili tartışmalarda savunduğunuz görüşün aksi görüşlere biraz daha saygılı olursanız seviniriz. Herkes kendi savunacağı görüşün iyiliğini kapsamlı olarak açıklamakta özgür Smile


Cvp: Delphi ORM Yapısı ile işlevsel kod çıktısı oluşturma - ismailkocacan - 18-09-2017

(18-09-2017, Saat: 16:04)Abdullah Ilgaz Adlı Kullanıcıdan Alıntı: ORM yapısına bir yenilik kazandırarak, benzer konseptte olan ancak farklı adlandırılan projelerin tek kod ve tek veritabanı yapısı ile işlevselliğini arttırmak.
Benzer konseptte olan proje kısmını tam anlamadım.Örneklemek mümkün müdür ?


Cvp: Delphi ORM Yapısı ile işlevsel kod çıktısı oluşturma - Abdullah ILGAZ - 19-09-2017

(18-09-2017, Saat: 16:48)ismailkocacan Adlı Kullanıcıdan Alıntı:
(18-09-2017, Saat: 16:04)Abdullah Ilgaz Adlı Kullanıcıdan Alıntı: ORM yapısına bir yenilik kazandırarak, benzer konseptte olan ancak farklı adlandırılan projelerin tek kod ve tek veritabanı yapısı ile işlevselliğini arttırmak.
Benzer konseptte olan proje kısmını tam anlamadım.Örneklemek mümkün müdür ?

Tabii ki.

Bir satış uygulaması düşünelim. Oluşturacağımız uygulamanın veritabanında ne olacak? Ürün(Stok), Müşteri(Cari), Kullanıcı, Fatura-Sipariş(Hareket) ve ek tablolar.

Şimdi bir oto yıkama uygulaması düşünelim. Neler olacak? Yıkama, Temizlik vs.(Stok), Araba(Cari), Kullanıcı, Fatura-Sipariş(Hareket) ve ek tablolar.

Bir üretim uygulaması düşünelim. Neler olur? Ham madde, mamül, yarı mamül(Stok), Müşteri, Fabrika(Cari), Kullanıcı, Fatura-Sipariş(Hareket) ve ek tablolar.

Yani aslında espri basit. Çoğu uygulamada Alıcı, Verici, Mesaj, Kanal kavramları var. Alıcı müşteridir. Verici kullanıcı. Mesaj ürün-hizmet. Kanal mesajın alıcıya ulaştırılma biçimi.


Delphi ORM Yapısı ile işlevsel kod çıktısı oluşturma - ismailkocacan - 19-09-2017

Peki.
Veritabanı tasarımı olarak benzer yapıda uygulamalar olabilir.Örnek olması açısından bir sağlık uygulamasında bire çok ilişkili tablolar olabildiği gibi, aynı şekilde bir finans uygulamasında da bire çok ilişkili tablolar olabilir.Fakat her uygulamanın iş mantığı/iş kuralı farklı değil midir?

Amaç bir araç yardımıyla tablo-alan isimlendirmeleri yapmak mı ? O kısmı tam anlamadım. :ss


Cvp: Delphi ORM Yapısı ile işlevsel kod çıktısı oluşturma - Abdullah ILGAZ - 19-09-2017

(19-09-2017, Saat: 10:01)ismailkocacan Adlı Kullanıcıdan Alıntı: Peki.
Veritabanı tasarımı olarak benzer yapıda uygulamalar olabilir.Örnek olması açısından bir sağlık uygulamasında bire çok ilişkili tablolar olabildiği gibi, aynı şekilde bir finans uygulamasında da bire çok ilişkili tablolar olabilir.Fakat her uygulamanın iş mantığı/iş kuralı farklı değil midir?

Amaç bir araç yardımıyla tablo-alan isimlendirmeleri yapmak mı ? O kısmı tam anlamadım. :ss

Aynı işe hizmet edecek 2 uygulamanın dahi birden fazla tablo farklılığı ve sütun farklılıkları olabilir. Buradaki ana espri, tek kod bloğu ile aynı CRUD işlemlerini yapacak ortak kod, ortak veritabanı ve minimum özelleştirme ile mümkün edilmesi.

Sağlık ve Finans örnekleriniz için; Sağlık uygulamasının ihtiyaç duyacağı özellik, modül, parametre ve kavramları Sağlık için özel olarak uygulanabilir hale getirilecek. Burası şuan konunun çok dışında. Aynı şekilde, yukarıdaki bahsettiğim ortak paydaya bakılırsa, Finans için teklif, çek-senet, banka gibi ek modüller yer alacaktır. Buradaki amaç tamamen aynı veritabanını birden fazla sektörde, her sektörün kendi jargonu ile isimlendirerek kullandırmak.

Toparlarsak; A sektörü için aynı uygulamadaki Stok tablosu Abonelik olarak adlandırılacakken, B sektörü için Stok tablosu Ham Madde olarak adlandırılacak. Bu görünümleri düzenleme ve özelleştirme imkanının olacağı bir sistem tablosu da olabilir.
Save


Delphi ORM Yapısı ile işlevsel kod çıktısı oluşturma - ismailkocacan - 19-09-2017

Somut bir kod örneği verebilir misiniz ?
Mesela "tek kod bloğu ile aynı CRUD işlemlerini yapacak ortak kod" nasıl olacak ?


Delphi ORM Yapısı ile işlevsel kod çıktısı oluşturma - masteryoda - 19-09-2017

yanlış anlamış olabilirim ama büyük crm projelerinde örneğin oracle'ıni crm i gibi ihtiyaçlarınıza göre tablo oluşturup x tablonun y alanı şu tablodan çek buraya şöyle bir verigeldiğinde webservisle şunu gönder gibi işlemleri paket alındıktan sonra siz yapıyorsunuz bir nevi yazılımın tablo yapısını / ekranlarını kurallarını siz kendi isteiğinize göre şekillendiriyorsunuz.





Delphi ORM Yapısı ile işlevsel kod çıktısı oluşturma - uparlayan - 22-10-2019

Amaç aynı tablo yapısını farklı projelerde kullanmak, bununla birlikte de CRUD işlemlerine hiç elinizi değdirmeden arka tarafta gerçekleşmesini sağlamak ise bunları ORM + (MVC veya MVP veya MVVM) tasarım kalıplarıyla yapabilirsiniz.

Diyelim ki bir kaç tablonuz var, her bir tablo için model adı verilen Class'larınız olur. Clasınızı Attribute'ler ile ORM'un yorumlayabileceği şekilde döşersiniz. Böylece her tablo için elinizde birer "MODEL" olmuş olur. Sonra bu modelleri ister MVC, ister MVP, isterse MVVM ile projeye dönüştürürsünüz. Böylece elinizdeki modelleri gerek duyduğunuz her projede kolayca kullanırsınız. Bu size hem Test Driven kod sağlar, hem de farklı platformlarda ürün geliştirmenize ön ayak olur. Böylece aynı projeyi hem web'de hem masaüstünde hem de mobilde geliştirebilirsiniz.

1) Kısa kısa yazdım ama kolay işler değil.
2) Aklıma ilk gelenler MVC, MVP, MVVM... Bunların dışında da elbet vardır uygun bir desen...

MVC : Model View Controller
MVP : Model View Presenter
MVVM : Model View ViewModel


Cvp: Delphi ORM Yapısı ile işlevsel kod çıktısı oluşturma - OldyCoder - 04-03-2020

Orm'leri klasik poco class'ları veritabanına map eden araçlar olarak görürsek haksızlık etmiş oluruz. Aslına bakarsanız salt poco class'lardan oluşan anemic bir modelleme de zaten anti pattern 'dir. Orm'lerin geliştiriciyi veritabanından soyutlama, kolayca veritabanı değiştirebilme, çok katmanlı mimaride uygulama geliştirme gibi birçok avantajı sayılabilir. Ancak en önemli yanı geliştirdiğiniz uygulamaya özgü iş algoritmalarını class'larla modellemenizi mümkün kılmasıdır.

Bu konuda domain driven design çok önemsediğim bir model.

DDD için Eric Evans ve Martin Fowler takip edilebilir. 

DDD ile ilgili kaynak için:
Domain-Driven Design Reference: Definitions and Pattern Summaries (Eric Evans)
Implementing Domain-Driven Design (Vaughn Vernon)