XAF ile İlk Projemizi Geliştirelim

Devexpress eğitim dokümanlarında anlatılan örneklerden bir tanesini bir kaç seri makale ile XAF kullanarak uygulamaya çalışacağım. Öncelikle yapılacak örnek projenin amacı ile başlayalım. Bu projede şirket içi çalışanların Intranet üzerinden etkinliklerini yöneteceği ve diğer verilerinin takibini yapacağı bir uygulama geliştirilmesi hedefleniyor. Ayrıca projenin bir web sitesi bir de winform uygulaması versiyonunun bulunması da hedefleniyor.

  • Bir kullanıcı, etkinlikler için temel bir planlama süreci düzenlemek amacıyla çalışanları, projeleri ve ilgili görev verilerini görüntüleyebilir, arayabilir, filtreleyebilir, yazdırabilir, oluşturabilir, güncelleyebilir ve silebilir.
  • Bir kullanıcı, bir web sitesi için verileri organize etmek ve sunmak amacıyla bir ürün hakkında müşterileri ve yorumları görüntüleyebilir, arayabilir, filtreleyebilir, yazdırabilir, oluşturabilir, güncelleyebilir ve silebilir.

Yazılım Mimarisi

Bu standart üç katmanlı mimari, birçok proje için yeterli bir alt yapı sunmakla birlikte daha karmaşık uygulama mimarileri için bir temel oluşturmaktadır. Takip edeceğimiz bu örneğin basit olması nedeni ile bu mimarinin herhangi bir değişikliğe gerek kalmadan ihtiyaçları karşılayacağı düşünülmektedir. Mimarideki bu başlıkları kısaca aşağıda açıklayarak projeye ilk adımımızı atalım.

  • Data Store / Veri Taban(lar)ı: Uygulama verilerinin depolanacağı veri tabanını temsil etmektedir. XAF popüler birçok veri tabanı yönetim sistemini desteklemektedir. Karmaşık ve özel bazı senaryolarda veri tabanı yerine XML web servisleri de veri kaynağı olarak kullanılabilir.
  • Data Access Layer / Veri Erişim Katmanı (DAL): Bu katmanda veri tabanına erişim için kullanılan alt yapı bulunur. Burada ORM (Object Relational Mapping) aracı olarak Microsoft Entity Framework (EF) veya eXpress Persistent Object (XPO) araçlarından biri seçilebilir.
  • Business Logic / İş Katmanı (BL): Uygulamaya özel çözümleri içeren kodlar burada bulunur. Genel mantığı MVC deseni ile aynıdır. Uygulamalarda UI katmanının direk olarak veri veya veri erişim katmanı ile haberleşmesi istenmediğinden, bu katman içerisinde UI ile veri katmanı arasında iletişimi kuran Controller yapısı da bu katman içerisinde yer alır.
  • Presentation / Sunum Katmanı (UI): Hedef katmana bağlı olarak (windows, web, mobil) iş katmanına veri gönderip sonuçları alan ve kullanıcıya gösteren katmandır. Burada XAF arayüzü kullanmak yerine başka görsel araçlar da kullanılabilir fakat biz konumuz itibari işe XAF’ın kullanışını inceleyeceğiz.

Proje Oluşturma

İlk önce Visual Studio içerisinde “File > New > Project” seçeneği tıklanır ve yeni proje açma ekranı açılır. Burada “Installed > Templates” kırılımı altında “Devexpress XAF” seçilir ve sağ bölümdeki “DevExpress v18.1 XAF Solution Wizard” projesi seçilir (Ben DevExpress v18.1 kullandığım için isimdeki versiyon kısmı v18.1 olarak görünüyor, sizde farklı bir versiyon olabilir). En alttaki “Name” kısmına projemizin adını ve “Location” bölümüne de projeyi açmak istediğiniz klasör yolunu girip OK butonuna tıkladığınızda XAF proje açma sihirbazı karşımıza gelecektir.

Açılan sihirbazın ilk ekranında yazılımın gerçekleştirileceği hedef platformların seçilmesi istenir. Ayrı ayrı platformlar seçileceği gibi, birden fazla platform da seçilerek proje geliştirilebilir. Buradaki platformlardan Mobil seçeneğinin halen beta sürümünde olduğunu ilave edeyim. Bu örnek için mobil platforma derleme yapılmayacağından, Windows ve Web seçeneklerini seçerek devam edeceğiz.

Bir sonraki ekranda veri erişim katmanında (DAL) kullanılacak ORM aracının seçilmesi istenmektedir. Burada sadece bir adet seçilmesi yeterli olacaktır fakat bu örnek kapsamında deneme amaçlı olarak Microsoft firmasına ait Entity Framework (EF) ve Devexpress firmasına ait eXpress Persistent Objects (XPO) araçları birlikte seçilmektedir.

Bu pencerede uygulama için güvenlik seçenekleri yer almaktadır. Burada uygulamaya entegre edilmek istenen güvenlik seçenekleri seçilir. Bu örnek projede güvenlik seçenekleri yer almayacağından, “Authentication” altında yer alan seçeneklerden “None” yazan seçeneği işaretleyerek devam ediyoruz.

Sihirbazın son ekranında da projeye dahil edilmek istenen özel XAF modüllerinin yer aldığı bir ekran gelmektedir. Bu örnek proje kapsamında herhangi bir ek modüle gerek olmadığından ilgili ekranda herhangi bir seçim yapılmadan “Finish” butonuna basılır ve proje oluşturulur.

Proje Ayarlarının Yapılması

Proje açma sihirbazı tamamlandıktan sonra yukarıda görülen “Solution” yapısı otomatik olarak oluşturulur. Kısaca bu projelerin ne işe yaradıklarından bahsedelim ve veritabanı bağlantı ayarlarının yapılması işlemine geçelim.

  • SimpleProjectManager.Module, platformdan ve UI katmanından bağımsız olan ve diğer katmanlar tarafından ortak kullanılan bir XAF modülüdür. Bu paylaşılan modülde yapılan değişiklikler, bu modüle bağlı olan diğer modüllere otomatik olarak yayılmaktadır.
  • SimpleProjectManager.Module.Win, Windows Forms projesine özel kodları ve Windows platformuna bağımlı kodları içerebilen bir XAF modülüdür. Bu modül SimpleProjectManager.Module projesini referans alır. SimpleProjectManager.Module içerisinde yapılan değişiklikler
    SimpleProjectManager.Module.Win projesine otomatik olarak yansır.
  • SimpleProjectManager.Module.Web, ASP.Net web formlarına özel kodları ve Web ortamına bağımlı kodları içerebilen bir XAF modülüdür. Bu modül SimpleProjectManager.Module projesini referans alır. SimpleProjectManager.Module içerisinde yapılan değişiklikler 
    SimpleProjectManager.Module.Web projesine otomatik olarak yansır.
  • SimpleProjectManager.Win ve SimpleProjectManager.Web sırasıyla Windows masaüstü ve Web tarayıcı arayüzlerini sağlamak için paylaşılan ve platform bağımlı modülleri referans alan uygulamaları yazmak için hazırlanmış projelerdir.

Proje açıldığında SimpleProjectManager.Win içerisinde app.config ve SimpleProjectManager.Web içerisinde de web.config dosyaları hazır vaziyette varsayılan bağlantı parametreleri ile bulunmaktadır. Projeyi çalıştırdığınızda bu config dosyalarında belirtilen veritabanlarına ulaşamayacağı için proje hata verecek ve açılmayacaktır. Yukarıda belirttiğim her iki config dosyasında bulunan connection string bilgilerini aşağıda görülen şekilde değiştiriniz.

<connectionStrings>
    <add name="EasyTestConnectionString" connectionString="Integrated Security=SSPI;Pooling=false;Data Source=YourServerIP;Initial Catalog=YourDatabaseName;User Id=YourUserID; Password=YourPassword"/>
    <add name="ConnectionStringXPO" connectionString="Integrated Security=SSPI;Pooling=false;Data Source=YourServerIP;Initial Catalog=YourDatabaseName;User Id=YourUserID; Password=YourPassword"/>
    <add name="ConnectionStringEF" connectionString="Integrated Security=SSPI;MultipleActiveResultSets=True;Data Source=YourServerID;Initial Catalog=YourDatabaseName;User Id=YourUserID; Password=YourPassword" providerName="System.Data.SqlClient"/>
</connectionStrings>

Config dosyalarında gerekli değişiklik yapıldıktan sonra Solution Explorer penceresinde SimpleProjectManager.Win (veya SimpleProjectManager.Web) projesine sağ tıklayarak Set as Startup Project seçeneğini işaretleyin. Sonrasında projeyi çalıştırırsanız projenin açılış ekranı karşınıza gelecektir. Şu an herhangi bir modül içermeyen boş bir ekran olarak uygulamamız çalıştı. Bir sonraki makalede gerekli modüllerin eklenmesi ile işlemleri ele alacağım.

Faydalı olması dileğiyle…

XAF Eğitim Serisi

Devexpress firmasına ait yazılım geliştirme platformu olan XAF Application Framework hakkında çok fazla Türkçe içerik olmadığından bir XAF eğitim içeriği yazmak istiyorum. Bunu yaparken de en önemli kaynağım https://documentation.devexpress.com sitesi olacak. Bu seride yer alacak olan içerikler bir bakıma Devexpress firması tarafından hazırlanan İngilizce içeriklerin Türkçeye çevrilmesi şeklinde olacak. Tabi kendi yorumumu da anladığım kadarı ile eklemeye çalışacağım. İlk önce XAF kullanmanın ve kullanmamanın getireceği avantaj ve dezavantajlarla başlayalım.

Genel Bakış

Günümüzde şirketler operasyonlarından kaynaklanan verileri bünyelerinde tutmak ve gerektiğinde ilgililere raporlamak durumunda kalmaktadır. Gitgide artan ve sürekli değişen ortamda yazılımların da bu sürece hızlı bir şekilde adapte olması gerekmektedir. Şimdi şirketlerin yazılımlarını tedarik ettiği yöntemlere göre geleneksel tedarik yöntemlerinin ve XAF alt yapısının avantaj ve dezavantajlarını inceleyelim.

İş Modeli 1: Şirkete Uygun, Özel Yazılım Geliştirilmesi

Şirket, ihtiyaç duyduğu yazılımları bağımsız bir yazılım şirketine veya varsa kendi şirket bünyesindeki bilgi teknolojileri departmanına sıfırdan yazdırabilir. Eğer yazılımcılar uygulamaları bazı işleri kolaylaştıracak şekilde bir çatı (framework) üzerine inşa etmemişse muhtemelen aşağıdaki sorunlarla karşılaşacaktır.

  • Yazılım geliştiriciler veritabanındaki her bir tablo veya alana veri girişin sağlamak için bir ekran tasarımı yapmak zorunda kalacaklar. Bu durumda çok basit veri giriş ve raporlama ekranları için bile uzun bir zaman ayırmak zorunda kalacaklar.
  • Çok büyük olasılıkla kod tekrarı yapılmaması konusu göz ardı edilecektir. Özellikle birden fazla yazılımcı olması durumunda herkesin kendi tarzını yansıtması sonucu, kod okunabilirliği düşecek ve sonradan projeye dahil olan yazılımcılar için sıkıntılı bir süreç yaşanacaktır.
  • Her yazılımda olabilecek hataların sıfırdan geliştirilen bir yazılımda görülmesi çok daha büyük bir olasılıktır. Hele ki yeterli testler yapılmadıysa çok daha büyük hatalar çalışma zamanında ortaya çıkacak ve geri dönülmeyen sorunlara yol açabilecektir.
  • Testlerin yapılması için çok ciddi zaman ve insan kaynağı ayrılması gerekir. Eğer yeteri kadar özen gösterilmezse hatalar gözden kaçacak ve ileride büyüyerek karşımıza çıkacaktır.
  • Bu tür uygulamalarda yazılım prensipleri büyük ihtimalle göz ardı edilmiş olacağından sonradan genişletilebilirlik ve bakım süreçleri çok maliyetli duruma gelebilir. Programda istenen yeni bir özellik için tüm formların tekrardan gözden geçirilmesi ve düzenlenmesi gerekir. Bu da çalışan bazı kodların bu düzenleme esnasında hataya düşmesine neden olabilir.

Bu yaklaşımda bazı avantajlar da bulunmaktadır.

  • Bu tür özel programlarda standart yazılımların sağlamayacağı kadar detaya inilebilir ve özelleştirilebilir. Tüm kontrol yazılım ekibindedir.
  • Uygulamalar belli bir kalıba uymak zorunda değildir. Örneğin eklenecek bir özelliğin, uygulamayı kullanacak tüm şirketlerin ortak ihtiyacını karşılayacak daha genel bir yapıda olması gibi kısıtlara takılmazlar. Bu yüzden işletmeye özel operasyonları tüm detaylarına kadar yönetebilirler.

İş Modeli 2: Evrensel Bir Yazılım Ürünü Satın Alma

Piyasada kendini kanıtlamış ve ihtiyacı karşılamaya aday yazılımlar arasından bir tanesi (Microsoft Dynamics Ürünleri, SAP, Micro, Logo, vb.) seçilerek satın alma yoluna gidilebilir. Bu iş modelinde karşılaşılacak bazı dezavantajlar şunlardır.

  • Bu tip uygulamaların kendine özgü frameworkleri, kodlama yapıları hatta özel yazılım dilleri bile olabilir. Bu da yazılım alındıktan sonra destek kısmında ya bu dilin/yapının öğrenilmesi veya bilen kişilerin istihdam edilmesi gibi pahalı bir yöntem olarak karşımıza çıkabilir.
  • Uygulamaların özelleştirilmesine ve özel ihtiyaçlara göre genişletilmesine ya izin vermez yada sınırlı bir esnekliğe sahiptir. Bazı durumlarda bu genişleme işi için de yüksek maliyetler karşımıza çıkabilir.
  • Bu evrensel ürünler sektördeki ihtiyaçların çoğunluğuna karşılık vermek durumunda olduklarından performans olarak özel yazılımlara göre biraz daha yavaş kalabilir. Ayrıca hali hazırda kullanmayacağınız bir çok özelliği de bünyesinde barındırdıklarından kullanmadığınız özelliklerin maliyetine de katlanma durumunda kalınabilir.

Tabi bu yazılımların avantajları da yok değil. Bunları da kabaca şu şekilde sıralayabiliriz.

  • Piyasada bilinen, kendini ilgili konuda kanıtlamış bir yazılım satın aldığınızda kalitesinden emin olabilirsiniz. Kapsamlı analizler sonucu yazıldığından ve gerekli testleri yapıldığından, hatalarla karşılaşma riskiniz diğer yazılımlara göre oldukça düşüktür.
  • Destek ve ek geliştirme maliyetlerini de göze alıp satıcı firma ile sözleşme imzalandığında, firma bünyesinde yazılımcı ve destek personeli tutmayarak sabit maliyetleri düşürebilirsiniz.

İş Modeli 3: eXpressApp Framework Kullanmak

Aslında tam olarak bir iş modeli denemese de yine de dokümandaki modellemeye sadık kalmak için XAF’ı da ayrı bir başlık altında değerlendireceğiz. Bu iş modeli aslında hazır bir alt yapı kullanarak yazılımları bu alt yapı ile geliştirme modeline tekabül eder ve yukarıda bahsettiğimiz iki modelin arasında bir noktaya konumlandırılabilir. Tabi makalenin konusu XAF olduğu için, XAF’ın özellikleri ve sağladığı kolaylıklar ile yazımıza devam edeceğiz.

XAF, uygulamaların sıfırdan yazılması durumunda karşılaşılacak problemleri gidermek için (İş modeli 1’i açıklarken bu problemlere değinmiştik) tasarlanmış bir alt yapıdır. Bazı avantajlarını şu şekilde sıralayabiliriz.

  • Arayüz ile kaygılanmayıp direk olarak iş mantığına odaklanıldığından farklı platformlar (WinForms, ASP.NET ve Mobile) için tasarlanmış uygulamalarda aynı iş mantığını kolayca yeniden kullanabilirsiniz. Bunu kabaca vergi ve ek maliyetlerin hesaplamasını yapan metodun bir kez yazılıp her platform için bu metodun çağrılması şeklinde düşünebiliriz.
  • Veri tarama ve düzenleme için birçok benzer formun manüel olarak oluşturmanıza gerek kalmaz. Bu şekilde uygulamaların bakımları da kolay yapılabilir bir duruma gelir çünkü verileri değiştirdiğinizde, çok sayıda formu ve/veya web sayfasını değiştirmek zorunda kalmazsınız. Tüm bu formlar ve web sayfaları veriye göre otomatik olarak XAF tarafından oluşturulur.
  • Verilere erişmek için herhangi bir DBMS ile uğraşmak veya ADO.NET kullanmak zorunda kalmazsınız. eXpressApp Framework, veri yönetimi için daha üst düzey bir araç sunar. Bu araç, verilerinizi ayrıntılı olarak tanımak zorunda kalmadan, herhangi bir popüler DBMS’yi kullanarak verilerinizi kaydetmeyi kolaylaştırır.
  • Sadece verileri depolamak ve gerektiğinde görüntülemek için tasarlanmış iş uygulamaları oluşturmayı son derece kolaylaştırır.
  • Uygulamaların herhangi bir .NET dili kullanılarak oluşturulmasına izin verir.
  • Arayüzlerin ve standart davranışların tamamını kendinize göre özelleştirebilirsiniz. Hatta açık kaynak kodlu geldiği için alt yapının tamamını da özelleştirmeniz mümkündür (pratikte çok zor olsa bile).
  • XAF tarafından sağlanan tüm bileşenler çok fazla test edilerek geliştirildiği için güvenle kullanılabilir.

Sonuç

Anladığım kadarı ile iş modellerinin avantaj ve dezavantajlarını aktarmaya çalıştım. Tabi başka iş modelleri olabileceği gibi, yukarıda aktarılanlardan daha fazla avantaj ve dezavantaj da eklenebilir. Burada hem Devexpress dokümanlarına sadık kalmaya çalıştım hem de anladığım kadarı çevirerek basit ilaveler de yapmaya çalıştım.

Faydalı olması dileğiyle…