Örnek konusunda yardımcı olayım.
* Çok farklı çeşitlerde direktif tanımlanabilir. Aynı UNIT altına üst kısımlarda bir yerlerde tanımlanabileceği gibi tüm projede tanınabilen halleri de vardır. Burada ona örnek vereceğim.
* Aynı projenin üç farklı modülü var diyelim. Aynı veritabanına erişiyor fakat modüle özel yetkiler ile donatılması gerekiyor.
* Modüllerden birisi Koordinasyon, diğeri Birim, bir diğeri de Gözlemci modülü olsun.
* Her üçünde de ortak olan kodları bir UNIT altında toplarız, kod ekonomisi dışında eğer bir güncelleme gerekirse aynı anda üç proje için ayrı ayrı kod yazmaktan kurtuluruz değil mi ? Bu güncelleme ne olabilir : Veritabanı alanlarından daha önce olmayan yeni bir alan eklediniz ve projenizde bu alana atıfta bulunacak değişiklikler yapacaksınız. Ortak UNIT içerisinde yapılan değişiklik her üç modül proje için de geçerli olacaktır. Adı üzerinde ortak modül. -tabii demeye gerek yok ama diyeyim, yeniden derlemek şartıyla-
* Şimdi konumunza gelip DEFINE olayını nasıl kullanıyoruz onu anlatayım.
Modüllerden Koordinasyon Modülü en kapsayıcı olanı olsun, her türlü menü elemanına erişsin. Birim Modülü orta seviye yetkili olsun sadece ilgili birimi ilgilendiren kısımlara erişsin. Gözlemci modülü en düşük yetkili olsun o da sadece raporlama alabilsin.
* Projenin
* Çok farklı çeşitlerde direktif tanımlanabilir. Aynı UNIT altına üst kısımlarda bir yerlerde tanımlanabileceği gibi tüm projede tanınabilen halleri de vardır. Burada ona örnek vereceğim.
* Aynı projenin üç farklı modülü var diyelim. Aynı veritabanına erişiyor fakat modüle özel yetkiler ile donatılması gerekiyor.
* Modüllerden birisi Koordinasyon, diğeri Birim, bir diğeri de Gözlemci modülü olsun.
* Her üçünde de ortak olan kodları bir UNIT altında toplarız, kod ekonomisi dışında eğer bir güncelleme gerekirse aynı anda üç proje için ayrı ayrı kod yazmaktan kurtuluruz değil mi ? Bu güncelleme ne olabilir : Veritabanı alanlarından daha önce olmayan yeni bir alan eklediniz ve projenizde bu alana atıfta bulunacak değişiklikler yapacaksınız. Ortak UNIT içerisinde yapılan değişiklik her üç modül proje için de geçerli olacaktır. Adı üzerinde ortak modül. -tabii demeye gerek yok ama diyeyim, yeniden derlemek şartıyla-
* Şimdi konumunza gelip DEFINE olayını nasıl kullanıyoruz onu anlatayım.
Modüllerden Koordinasyon Modülü en kapsayıcı olanı olsun, her türlü menü elemanına erişsin. Birim Modülü orta seviye yetkili olsun sadece ilgili birimi ilgilendiren kısımlara erişsin. Gözlemci modülü en düşük yetkili olsun o da sadece raporlama alabilsin.
* Projenin
Projenin istediğiniz bir UNIT'inde eğer o kısım birden farklı projenizde veya modülde kullanılacaksa aşağıdaki şekilde USES kısımlarını ayırabilirsiniz.
Aynı zamanda kod içerisinde -örneğin aşağıdaki excel export kısmından bir kesit var- modüle göre raporlamalada kiminde kişinin telefon numarası görünsün, kimisinde görünmesin ama bu defa epostası görünsün istendiğinden bu şekilde tasarlandı.
Dolayısıyla aynı rapor fonksiyonu/procedure üç farklı projede çalışırken direktife göre farklı çıktı sunacaktır.
Bu sadece bir örnek, direktif olarak bir UNIT'in başında onun Windows altında çalışırken şöyle kullan, Android altında şöyle, FMX ise şöyle, VCL ise böyle kullan diyebilirsiniz. Onun için bu verdiğim örnek gibi değil direkt unit'in ilk satırlarına
// Platform Selection // ------------------------- //{$DEFINE HAS_FMX} {$DEFINE HAS_VCL} // -------------------------
şeklinde bir tanım koyarsınız, birisinin başına // koyup comment altına alıp devre dışı bırakırsınız.
Kodlarınızı da aşağıdaki şekilde çift ihtimalli yazarsınız.
{$IF defined(HAS_FMX)} FMX.Dialogs, FMX.Graphics, FMX.DialogService, FireDAC.FMXUI.Wait, {FDGUIxWaitCursor.Provider := 'FMX'} {$ENDIF} {$IF defined(HAS_VCL)} Vcl.Dialogs, FireDAC.VCLUI.Wait, {FDGUIxWaitCursor.Provider := 'Forms'} {$ENDIF}
Projeyi derlemeden önce proje tipiniz hangisi ise // olanı diğerine koyarsınız aynı kodun diğer versiyonunu kullanırsınız.
Umarım karışıklık yaratmadan özetleyebilmişimdir.
Saygılarımla
Muharrem ARMAN

Muharrem ARMAN
