Delphi Can

Orjinalini görmek için tıklayınız: Dynamic Method Invoke
Şu anda (Arşiv) modunu görüntülemektesiniz. Orjinal Sürümü Görüntüle internal link
Sayfalar: 1 2
Bu soruda; Aşağıdaki unit dosyasını projeye ekledikten sonra, TBirsey sınıfından bir nesne oluşturup, Yap methodunu çağırılması isteniyor.
Fakat kullanacağınız unit içindeki uses bloklarında, UnitBirsey isimli unitin tanımlı olmaması gerekiyor.  Ayrıca bir memory leak olmaması gerekiyor.
unit UnitBirsey;

interface

uses
  System.Classes,
  Vcl.Dialogs;

type
  TBirSey = class(TPersistent)
  public
    procedure Yap;
  end;

implementation

procedure TBirSey.Yap;
begin
  ShowMessage('Bir şey yaptım');
end;

initialization
  RegisterClass(TBirSey);

finalization
  UnRegisterClass(TBirSey);
end.


İyi eğlenceler.
Bu bölümü hortlattığın için çok teşekkürler @ismailkocacan Wink

P.tesi sabahı, işe başlamadan güzel bir antrenman yapmış oldum senin vesilenle:

uses RTTI;
var
  RC: TRttiContext;
  InsType: TRttiInstanceType;
  Obj : TObject;
begin
  InsType := (RC.FindType('UnitBirsey.TBirSey') as TRttiInstanceType);
  Obj := InsType.MetaClassType.Create;
  try
    InsType.GetMethod('Yap').Invoke(Obj, []);
  finally
    Obj.Free;
  end;
end;
(17-02-2020, Saat: 09:26)SimaWB Adlı Kullanıcıdan Alıntı: [ -> ]Bu bölümü hortlattığın için çok teşekkürler @ismailkocacan Wink

P.tesi sabahı, işe başlamadan güzel bir antrenman yapmış oldum senin vesilenle:

uses RTTI;
var
  RC: TRttiContext;
  InsType: TRttiInstanceType;
  Obj : TObject;
begin
  InsType := (RC.FindType('UnitBirsey.TBirSey') as TRttiInstanceType);
  Obj := InsType.MetaClassType.Create;
  try
    InsType.GetMethod('Yap').Invoke(Obj, []);
  finally
    Obj.Free;
  end;
end;
Ellerinize Sağlık Smile
(17-02-2020, Saat: 09:26)SimaWB Adlı Kullanıcıdan Alıntı: [ -> ]Bu bölümü hortlattığın için çok teşekkürler @ismailkocacan Wink

P.tesi sabahı, işe başlamadan güzel bir antrenman yapmış oldum senin vesilenle:

Kod:
uses RTTI;

var
  RC: TRttiContext;
  InsType: TRttiInstanceType;
  Obj : TObject;
begin
  InsType := (RC.FindType('UnitBirsey.TBirSey') as TRttiInstanceType);
  Obj := InsType.MetaClassType.Create;
  try
    InsType.GetMethod('Yap').Invoke(Obj, []);
  finally
    Obj.Free;
  end;
end;
Kodları anlamakla beraber nerelerde kullanıldığını merak ediyorum. Bugüne kadar hiç görmedim. Nasıl problemlerde değerlendirilebilir
(17-02-2020, Saat: 22:42)narkotik Adlı Kullanıcıdan Alıntı: [ -> ]
(17-02-2020, Saat: 09:26)SimaWB Adlı Kullanıcıdan Alıntı: [ -> ]Bu bölümü hortlattığın için çok teşekkürler @ismailkocacan Wink

P.tesi sabahı, işe başlamadan güzel bir antrenman yapmış oldum senin vesilenle:

Kod:
uses RTTI;

var
  RC: TRttiContext;
  InsType: TRttiInstanceType;
  Obj : TObject;
begin
  InsType := (RC.FindType('UnitBirsey.TBirSey') as TRttiInstanceType);
  Obj := InsType.MetaClassType.Create;
  try
    InsType.GetMethod('Yap').Invoke(Obj, []);
  finally
    Obj.Free;
  end;
end;
Kodları anlamakla beraber nerelerde kullanıldığını merak ediyorum. Bugüne kadar hiç görmedim. Nasıl problemlerde değerlendirilebilir

Nerelerde kullanıldığına dair bir örnek; Remote Method Invocation
Alıntı:http://host:port/datasnap/rest/[ClassName]/[MethodName]/[ParamValue]
Front Control Pattern'de de bu yöntem kullanılabilir.
(10-09-2020, Saat: 23:32)uparlayan Adlı Kullanıcıdan Alıntı: [ -> ]Front Control Pattern'de de bu yöntem kullanılabilir.
Haklısınız.Ayrıca hardcoded bir yöntem olmamış olur.
Eğer buysa, şu methodu çağır gibi bir sürü kod olmaz.
Hatta o bilgi yığını kullanılarak otomatik menü de oluşturulabilir
(11-09-2020, Saat: 21:50)uparlayan Adlı Kullanıcıdan Alıntı: [ -> ]Hatta o bilgi yığını kullanılarak otomatik menü de oluşturulabilir

Şu an yalnızca ikiniz (birkaç kişi daha olabilir) aynı frekansta anlaşıyorsunuz.  Wink
Bizim anlayacağınız bir seviyede, basit de olsa örnekleyerek anlatabilir misiniz @uparlayan üstadım.
@Fesih ARSLAN ustadım estağfurullah  Wink

Ayrı bir konu mu açsak bilemedim ama buradaki teknik şimdi özet olarak bahsedeceğim tasarım deseninin ufak ama can alıcı bir noktasını da temsil ediyor.

Front Controller (Ön Kontrolör) tasarım modeli, tüm taleplerin, isteklerin tek bir Dispatcher (işleyici) tarafından ele alınabilmesi için merkezi bir talep işleme mekanizması sunar. Bu işleyici, talebin kimlik doğrulamasını, yetkilendirmesini, loglanmasını veya talebin takibini yapabilir ve ardından talepleri ilgili işleyicilere yönlendirebilir. Bu tasarım modelinin 3 temel varlık tipi vardır;
  • Front Controller (Ön Denetleyici)
    Uygulamaya gelen her türlü istek için merkezi, tek işleyicidir. Bu nesne tüm uygulama boyunca sadece 1 kere tanımlanır. Bu nesne bir singleton nesne şeklinde tasarlanabilir. Temel görevi yukarıda saydıklarıma ek olarak parametreleri Dispatcher'e iletmektir.


  • Dispatcher (Dağıtıcı)
    Front Controller'den gelen talebi ilgili View'e yönlendirir. Dağıtıcılığı da bu davranışından kaynaklıdır. Yani Front Controller'den gelen talepleri emir gibi kabul edip ilgili View'i çağırır veya yükler. Dispatcher serbst bir sınıf olabileceği gibi, duruma göre Front Controller'in altındaki bir nested class olarak da tanımlanabilir. Facade veya Fabric tipi tasarım desenleri de kullanılıyorsa Dependency'leri en aza indirgemek adına ayrı (serbest) bir sınıf şeklinde tanımlanması daha doğru olabilir.

    Dynamic Method Invoke tekniği ise bu nesnenin içinde kullanılır. 

  • View (Görünüm)
    Görünümler, isteklerin yapıldığı, gerçekleştiği, fiilen elle tutulur gözle görülür hale getirildiği nesnelerdir. Bunu basit anlamda Diyalog pencereleri, formlar veya actionlar gibi düşünebilirsiniz. Çünkü sonuçta tüm bunlar kullanıcının etkileşim içine girdiği farklı tipteki nesnelerdir.
Peki bu tasarım deseninin faydası ne? Çok basit, düzen...

Herkesin aşina olduğu gibi masaüstü bir uygulama üzerinden düşünelim. Normalde alışageldiğimiz haliyle ne yapıyoruz? Ana ekrana bir menü veya bu işi görecek bir treeview veya bir ribbon vesaire ekliyoruz. Sonra bu menüye elemanlar ekliyoruz kimisini actionlara bağlıyoruz kimisini ise onclick olayına bağlıyoruz. Devamında ne yapıyoruz? Actionda veya OnClick olayında gidip bu formları Create ediyoruz, bazılarına parametre veriyoruz vesaire... E güzel, güzel de iş 30-40 formdan sonra kendini tekrarlamaya başlıyor... Aynı kodu 30-40 yerde görmeye başlıyoruz değil mi... Bunu bir problem olarak görmeyenleriniz elbette olacaktır, teknik olarak yanlış bir yol da değil zira sağ elimizle sol kulağımızı tutuyoruz aslında ama programcı olarak "odağımızı" kaybediyoruz. Bu tasarım deseni temelde bize bunu sağlıyor. Ben 30-40 formdan bahsettim ama aranızda yüzlerce form ve menülerle uğraşan arkadaşlarımız da elbette vardır. Bir de onlardan dinlemek isterim siz bu hengameyle nasıl mücadele ediyorsunuz diye...
Sayfalar: 1 2