Konuyu Oyla:
  • Derecelendirme: 0/5 - 0 oy
  • 1
  • 2
  • 3
  • 4
  • 5
Delphi MVC Framework
#1
Arkadaşlar merhaba, aranızda daha önce Delphi MVC Framework deneyimleyen arkadaşımız oldu mu ? Var ise düşüncelerini ve tecrübelerini bizimle paylaşabilir mi ?
Mal sahibi, mülk sahibi
Hani bunun ilk sahibi ?
Mal da yalan mülk de yalan
Var biraz da sen oyalan...
WWW
Cevapla
#2
Kullanma fırsatım olmadı ama Facebook da bir grup var orası bayağı aktif zaman zaman bakıyorum. İsterseniz birde orada paylaşın.

https://www.facebook.com/groups/delphimvcframework/
PostgreSQL - Linux - Delphi, Poliüretan
WWW
Cevapla
#3
Sorduğunuz framework'ü kullanmadım ancak TMS XData'yı önerebilirim.
Ticari projelerde de sorunsuzca kullanıyorum. Daha specific sorularınız olursa yardımcı olmaya çalışırım.
Cevapla
#4
(06-02-2020, Saat: 11:18)Tuğrul HELVACI Adlı Kullanıcıdan Alıntı: Arkadaşlar merhaba, aranızda daha önce Delphi MVC Framework deneyimleyen arkadaşımız oldu mu ? Var ise düşüncelerini ve tecrübelerini bizimle paylaşabilir mi ?

Ben kullandım bir örnek projede. Oldukça gelişkin bir paket. REST sunucu ve kullanıcı yazılımları için büyük kolaylıklar sağlıyor. Ben denediğim sıralarda Nullable tipler konusunda biraz sorun vardı. Ama sanırım son güncellemelerle birlikte o sorunu da aştı (bildiğim kadarıyla Spring4d'nin nullable tiplerini kullanıyor). 

Kendi ORM'si de var ve bunu ActiveRecords'da kullanıyor. Bu ORM masaüstü uygulamalarda da kullanılabiliyor.

Özellikle ActiveRecords ve RQL yapısı denilen bir yapı var ki, oldukça enteresan. RQL kurallarına göre kullanıcıda oluşturulan talep (request) sunucuda ilave herhangi bir dönüştürme işlemine gerek kalmadan DB'den verileri çekip kullanıcıya gönderilecek halde size veriyor. 

Kimlik ve yetki doğrulama (Authentication-Authorization) sistemi de mevcut. Yetki sistemi rol bazlı. Delphi içindeki rol sistemiyle hemen hemen aynı kullanımda. 

JWT (Java Web Token)'yi destekliyor (bunu ben kullanmadım). Benim kullandığım Custom Authentication'dı.

Authorization kısmını ben biraz değiştirmiştim, Role yerine Permission koydum (bunu değiştirmeden de kullanılabilirdi esasen) . Bunları destekleyecek kadar da esnek yapıda.

Ancak tümüyle yeni paradigmalar üzerinden yazılmış bir paket. Haliyle alışana kadar biraz zorluk oluyor.

Örnek kod da paylaşayım, biraz karışık görünebilir ama bu konsepte alıştınız mıydı çok anlaşılır gelecek, geleneksel yönteme küçümseyerek bakış edinilecektir (!). Bu projede Spring4d MarshMallow ORM kullanmıştım aynı zamanda. Ancak ikisi birden biraz fazla geldi o zaman. Ancak şimdi nasıl olur bilemem.


type
  [MVCPath('/currency')]
  TCurrencyUnitController = class(TMVCController)
  private
  protected
    procedure OnBeforeAction(Context: TWebContext; const aActionName: string;
      var Handled: Boolean); override;
    procedure OnAfterAction(Context: TWebContext;
      const aActionName: string); override;
  public
    [MVCPath('/list')]
    [MOMvcAuthorize('3100,3101,3105')]
    [MVCProduces('application/json')]
    [MVCHTTPMethod([httpGET])]
    procedure CurrencyUnitList(ctx: TWebContext);

    [MOMvcAuthorize('3100,3101,3102')]   // Bu benim eklentimle ilgili, başında kendi işaretim var zaten
    [MVCProduces('application/json')]
    [MVCHTTPMethod([httpPOST])]
    [MVCPath('/add')]
    procedure CurrencyUnitAdd(ctx: TWebContext);

    [MOMvcAuthorize('3100,3101,3103')]
    [MVCProduces('application/json')]
    [MVCHTTPMethod([httpPUT])]
    [MVCPath('/update/($id)')]
    procedure CurrencyUnitEdit(id : integer);

    [MOMvcAuthorize('3100,3101,3104')]
    [MVCProduces('application/json')]
    [MVCHTTPMethod([httpDELETE])]
    [MVCPath('/delete/($id)')]
    procedure CurrencyUnitDeleteById(id : Integer);

    [MOMvcAuthorize('3100,3101,3105')]
    [MVCProduces('application/json')]
    [MVCHTTPMethod([httpGET])]
    [MVCPath('/view/($id)')]
    procedure CurrencyUnitView(id : Integer);
  end;

implementation
uses WebModuleUnit1, MainDM, Spring.Persistence.Core.Interfaces, MVCFramework.Serializer.Commons;

{ TCurrencyController }

procedure TCurrencyUnitController.CurrencyUnitAdd(ctx: TWebContext);
var
  Currency: TCurrency;
begin
  Currency := Context.Request.BodyAs<TCurrency>;
  try
    MainDM.DatabaseSession.Insert(Currency);
    Render(201, 'CurrencyUnit Created');
  finally
    Currency.Free;
  end;
end;


Cevapla
#5
XData tarafındada benzer yetenekler mevcut.
OpenAPI Specification desteği var. Swagger kullanabiliyorsunuz.
RQL ilk başta müthiş görünsede entity'leri olduğu gibi kullanıcıya açmak bana doğru gelmiyor.
Ben mutlaka endpoint'lerin arkasına bir application service koyuyorum. Zaten nasıl bir modelleme yaparsanız yapın mutlaka ufak tefek bir business'iniz oluyor.


Size katılıyorum.
Böyle bir mimaride kendinizi çok rahat hissediyorsunuz ve geleneksel yöntemlere dönmek istemiyorsunuz.

Zorluk ilk başlarda klasik yöntemlerden (alışkanlıklardan) vazgeçme aşamasında yaşanıyor.
Burada biraz ısrarcı olmak gerekiyor.

Zamanın büyük kısmını domain'i doğru modellemek için harcıyorsunuz. 
Problem domain'i sub domain'lere ideal şekilde bölmek, bunları birbirinden izole edip bağımsız hale getirmek birazda tecrübeyle oluşacak birşey.
Şahsen hala bu aşamada olduğumu düşünüyorum. Karşılaştığınız her sorun birşeyler katıyor.
Ancak sonrası çok keyifli.
Modeliniz doğruysa sonrasında monolithic'mi devam edersiniz yada microservice'mi yaparsınız keyfinize kalmış.

Bu arada örneğinizden çıkardığım kadarıyla MVC Framework method response'larını kendisi handle etmiyor. 
Method sonlanırken response manuel'mi yazılıyor?
Belki bu kısım daha konforlu olabilirdi.
Cevapla
#6
(05-03-2020, Saat: 15:03)OldyCoder Adlı Kullanıcıdan Alıntı: XData tarafındada benzer yetenekler mevcut.
OpenAPI Specification desteği var. Swagger kullanabiliyorsunuz.
RQL ilk başta müthiş görünsede entity'leri olduğu gibi kullanıcıya açmak bana doğru gelmiyor.
Ben mutlaka endpoint'lerin arkasına bir application service koyuyorum. Zaten nasıl bir modelleme yaparsanız yapın mutlaka ufak tefek bir business'iniz oluyor.


Size katılıyorum.
Böyle bir mimaride kendinizi çok rahat hissediyorsunuz ve geleneksel yöntemlere dönmek istemiyorsunuz.

Zorluk ilk başlarda klasik yöntemlerden (alışkanlıklardan) vazgeçme aşamasında yaşanıyor.
Burada biraz ısrarcı olmak gerekiyor.

Zamanın büyük kısmını domain'i doğru modellemek için harcıyorsunuz. 
Problem domain'i sub domain'lere ideal şekilde bölmek, bunları birbirinden izole edip bağımsız hale getirmek birazda tecrübeyle oluşacak birşey.
Şahsen hala bu aşamada olduğumu düşünüyorum. Karşılaştığınız her sorun birşeyler katıyor.
Ancak sonrası çok keyifli.
Modeliniz doğruysa sonrasında monolithic'mi devam edersiniz yada microservice'mi yaparsınız keyfinize kalmış.

Bu arada örneğinizden çıkardığım kadarıyla MVC Framework method response'larını kendisi handle etmiyor. 
Method sonlanırken response manuel'mi yazılıyor?
Belki bu kısım daha konforlu olabilirdi.
Merhaba,
RQL tüm entity'leri kullanıcı tarafa otomatikman açmıyor, yine aynı şekilde talebi karşılayacak bir servis katmanı yazmanız gerekiyor. Ancak bu iş çok basitleşiyor. 

Örnek ActiveRecord değil ve evet response'yi kendiniz oluşturuyorsunuz. Geniş bir dönüştürme yordam yığını var. Ayrıca kişiselleştirebiliyorsunuz.
Cevapla
#7
Alıntı:Merhaba,
RQL tüm entity'leri kullanıcı tarafa otomatikman açmıyor, yine aynı şekilde talebi karşılayacak bir servis katmanı yazmanız gerekiyor. Ancak bu iş çok basitleşiyor. 

Örnek ActiveRecord değil ve evet response'yi kendiniz oluşturuyorsunuz. Geniş bir dönüştürme yordam yığını var. Ayrıca kişiselleştirebiliyorsunuz.


Kısaca bir göz gezdirdim. Güzel görünüyor. Küçük bir proje üzerinde denemek daha doğru olacak.
Cevapla


Konu ile Alakalı Benzer Konular
Konular Yazar Yorumlar Okunma Son Yorum
  Delphi 10.3 Rest Debugger sorunu varyemez 3 83 27-05-2020, Saat: 10:08
Son Yorum: SimaWB
  python, c++ for delphi tarzında eğitim, delphi ile diller arası entegrasyon eroniko 3 100 26-05-2020, Saat: 18:15
Son Yorum: engerex
  Delphi 10.3 Rio KeyBindings Abdullah ILGAZ 5 228 19-05-2020, Saat: 02:37
Son Yorum: Abdullah ILGAZ
Lightbulb Delphi Proje Yardım ThePixeL 18 1.209 29-04-2020, Saat: 02:28
Son Yorum: ThePixeL
  delphi clamav library sorunu, eroniko 6 423 27-04-2020, Saat: 03:27
Son Yorum: eroniko



Konuyu Okuyanlar: 1 Ziyaretçi