Web uygulamaları günler geçtikte daha bir görsel ve daha bir işlevsel olmaktadır. Bu gelişmenin Microsoft gerçekleşmesini sağlayan teknoloji ise Silverlight 'tır. Başlarda basit animasyon işlemleri yaparken şu anda WCF servisleri ile validation kontrolleri ile ve diğer bir çok özelliği ile Asp.Net uygulamalarına alternatif olarak düşünebilir seviyeye gelme yolunda son sürat ilerlediğini gözlemliyoruz. Bu süreçlerin ilerlemesi ile iş uygulamalarında da Silverlight düşünülmeye başlanmıştır. Bildiğiniz üzere Asp.Net MVC Framework yardımı ile veri, nesne ve görsel katmanları ayrı ayrı kullanabilmemize olanak tanıyan bir şablon ile karşımıza gelmektedir. Bu uygulama şablonunda özellikle Entity katmanı yardımı ile veri işlemleri üzerinde yapacak olduğumuz işlemleri rahatça yapılabilmesi mümkündür. Silverlight Business Application yardımı ile de hazır bir şablon gelmekte ve işleri kolaylaştırabilmektedir. Silverlight Business Application hakkında temel bilgi ve proje şablonu hakkında bilgi edinmek için
burada yer alan yazıdan yararlanabilirsiniz.
Silverlight Business Application, WCF RIA servisleri yardımı ile veri işlemlerini domain servisler ile uyumlu bir şekilde gerçekleştirebilmesi mümkündür ki alt yapısı da bu entegrasyon üzerine kurulmuştur. Biz de bu yazımızda WCF RIA servislerini kullanarak veri üzerinde ekleme, silme ve gösterme işlemlerini inceliyor olacağız.
Not: WCF RIA servisleri konusunda ayrıntılı bilgi edinmek için
buradan yararlanabilirsiniz.
Silverlight Business Application Silverlight 3 ve 4 araçları içerisinde yer alan iş süreçlerine uyumluluğu olan bir proje şablonudur. Yeni bir proje oluşturulurken kullanıcı üyelik, sisteme giriş, windows authentication yardımı ile sisteme giriş yapabilme, ana sayfa gibi temel yapıları bünyesinde katmansal bir yapı ile bulundurduğu için tercih edilebilecek oldukça güzel bir proje şablonudur. Şimdi adım adım basit bir örnek üzerinde neler yapabileceğimize incelemeye başlayalım.
Not: Geliştirilecek olan uygulama,
Visual Studio 2010 üzerinde
Silverlight 4 kurulu bulunan bir bilgisayar üzerinde yapılacaktır. Ayrıca veri tabanı sunucusu olarak
SQL Server 2008 Express Edition kullanılıyor olacak. Uygulama esnasında kullanılacak olan veri tabanını
buradan indirip kendi veri tabanı sunucusunuza ekleyip kullanabilir ve yazı içerisinde yapılan örnekleri benzer veriler ile uygulayabilirsiniz. Dosyanın boyutu
3 mb 'dir.
Uygulama geliştirirken Entity Framework ve WCF RIA Domain servisi kullanıyor olacağız. Visual Studio üzerinde yeni proje oluştur diyip Silverlight proje sablonları arasından Silverlight Business Application 'ı bulup projemizi oluşturuyoruz.
Karşımıza Silverlight ve web projesi olmak üzere içerisinde iki proje olan şablon ile açılmaktadır.
Projeyi oluşturduktan sonraki bir diğer adım WCF RIA Servisini uygulama hangi projeden link alarak kullanacağıdır. Bu amaçla Silverlight projesinin özellikler ekranında bu özelliğin aktif olup olmadığını kontrol ediyoruz.
Web projesine WCF RIA Servisi linkini vererek kullanıcı tarafında domain servislerinin kullanılabilmesini de aktif duruma getirmiş oluyoruz. Bu sayede entity framework ile gösterecek olduğumuz verileri web uygulamasını referans göstererek her yerde kullanabilmemiz mümkün olacaktır. Peki, geliştirilecek olan uygulamalarda WCF RIA servisi kullanmanın ne gibi avantajları olacaktır.
•
Katmansal uygulamalarda geliştirme kolaylığı, .Net ile geliştirilen uygulamaların sunucu-kullanıcı arasındaki etkileşimi sağlamayı kolaylaştırır.
•
Varlıkların karşılıklı paylaşılması, Model sınıfları, doğrulama (Validation) kuralları ve diğer veri ilişkileri
•
Kullanıcı tabanlı destekleyiciler, Otomatik veri eşlemeleri, sayfalama, güncelleme, değişiklik takibi
şeklinde temel faydalarını kısa başlıklar altında sıralayabiliriz.
Web sunucusunu Domain Service ve Model 'den oluşmaktadır. Model Entity Modelinden oluşur ve içerisinde CRUD işlemleri olarak adlandırılan create,read,update ve delete işlemlerini barındırır. Domain Services ise Entity Data model 'de bulunan işlemlerin aktarılmasında yer alır. İşleyiş mantığı ise Silverlight kullanıcısından alınan verilerin model katmanı ile hangi yöne yönleneceğinin belirlenmesi ile gerekli veri mesajları Domain Context 'e iletilir. Buradan işi asıl yapacak olan web sunucusuna verilerin aktarılması işi ise WCF ile yapılmaktadır.
RIA Domain servielerininin temel olarak sağladıkları aşağıdaki gibidir.
•
WCF Servisleri, Bütün WCF özellikleri kullanılabilir. Servis referansları eklenebilir.
•
Özelleştirilmiş taban sınıfları, LinqToEntities (Ado.Net Entity Data Model), LinqToSQL (Linq To SQL Data Model) ve Authentication bazlı sınıfların oluşturulabilmesi.
WCF RIA servisleri yalnızca verilerin taşınması değil aynı zaman gösterilmesini sağlamaktadır. Proje içerisine eklenmiş olan DomainServise gösterilen veri modelini veri kaynağı olarak gösterdikten sonra oluşan objeleri silverlight formlar üzerine sürükle bırak yöntemi ile GridView görünümünde verilerin gösterilebilmesi ve düzenlenebilmesi olanağı vardır. Ayrıca bu grid içerisinde ListBox, Combox gibi kontrollerin kullanılabilmesi mümkündür. Ayrıca grid üzerinde gösterilmekte olan verileri düzenlenmesi anında Silverlight 'ın sağladığı bütün kontrollerin kullanılabilmesi olanağı da vardır. Peki ne tür veri kaynakları kullanabiliriz. Silverlight Business Application 'da WCF RIA servislerinin dışında .Net uygulamaları geliştirirken kullanılan bütün veri kaynaklarının kullanılabilmesi mümkündür. Tavsiye ise daha önceden açıkladığımız sebeplerden ötürü WCF RIA servisleridir.
Yapmış olduğumuz kısa tanımlamalar, açıklamalar ve uygulama içerisinde WCF RIA servislerinin link edildiğini görmemizin sonrasında uygulamamızı geliştirmeye başlayabiliriz.
RIA servislerinden bu kadar bahsettikten sonra öncelikli olarak web projesinin içerisinde services klasörünün içerisinde yer alan Domain Services sınıflarına göz atalım. İlk etapta iki tane sınıf bulunmaktadır. Bunlar, Authentication ve UserRegistration servisleridir. Bu sınıflarda gerekli servislerin içlerinde User nesnesini kullanarak kullanıcıların sismete giriş yapma veya kayıt olma işlemlerini yapabilmeleri mümkündür. Şimdi uygulamayı çalıştırarak oluşturulan login ve yeni kullanıcı formlarına hemen göz atalım.
Kullanıcı giriş ekranı ise,
şeklindedir. Daha önceden vermiş olduğumuz linkte yer alan veri dosyasını web uygulamasında yer alan App_Data klasörüne ekleyerek sonrasında da Server Explorer içerisinde tablolara bakarak veri dosyasının doğru olarak eklendiğini kontrol ediyoruz. Sonrasında ise veri modelini oluşturmamız gerekmektedir. Bu amaçla Ado.Net Entity Framework ten yararlanacağız. Web projesine yeni bir öğe ekle seçeğini kullanarak ADO.NET Entity Data Model 'i seçerek adımları tamamlıyoruz. Tablo kısmında aşağıda yer alan resimdekileri eklememiz yeterli olacaktır.
Bu adımdan sonra Entity Model tanımlanmış oluyor. Sonrasında sorunsuzca çalışması ve eklenen DLL 'lerin temp dosyalarının oluşması için bir kere uygulamayı derliyor ve sonrasında adımlarımıza devam ediyoruz. Şimdi uygulamaya Domain Service sınıfını ekleyeceğiz. Bunun için web uygulamasında services klasörünün üzerinde sağ tıklama yapıyoruz ve yeni bir öğe ekle diyoruz. Sonrasında web tabının içerisinde yer alan
Domain Service Class ekliyoruz. Sonrasında bizden veri kaynağımıza ilişkin kullanacağımız tabloları seçmemizi isteyecektir. Bu ekranı aşağıdaki şekilde hazırlıyoruz.
İşlemi tamamladıktan sonra
EventManagerDomainService.cs ve
EventManagerDomainService.metadata.cs isimli iki dosya oluşturmaktadır. Metadata dosyasının içerisinde tablolarda yer alan öğelerin nesnesel olarak metotlarda özellikleri yer alır. EventManagerDomainService içerisinde ise metadata içerisinde yer alan nesnelerden yararlanarak hazırlanmış olan CRUD işlemlerinin yapılacağı metotlar yer almaktadır.
Sıra işin biraz daha görsek kısımlarına geldi. Verileri göstermek için gerekli altyapıyı hazırladık. Şimdi bu verileri kullanarak son kullanıcıya değerler göstermemiz gerekmektedir. Bunun için Silverlight uygulamasının içerisinde Views klasörünün içerisinde yer alan
Home.xaml ekranından yararlanıyor olacağız. Bu sayfayı açtıktan sonra data menüsünün altında yer alan Show Data Source 'a tıklayarak WCF RIA servisleri ile gelen veri kaynaklarını görüntüleyebiliriz.
Eklemiş olduğumuz tablolar veri kaynağı kısmında bizim kullanımızı hazır olarak beklemektedir.
EventManagerDomainContext içerisinde yer alan objelerin üzerine inceleme yaptıysanız GridView şeklinde hazırlanmış olduğunu ve direk kullanılabilir durumda olduğu dikkat çekmektedir. Bize bu durumda yalnızca form üstüne bunlardan herhangi birini sürükleyip verileri görüntelemek kalıyor. Bu yazımızda örnek olarak
Event nesnesini kullanıyor olacağız.
Veri gösterme işini başarılı bir şekilde başardık. Sıradaki işlemimiz ise bu veriler üzerinde düzenleme yapmak için neler yapamamız gerektiği olacaktır.
Düzenleme işleminin yapılabilmesi için öncelikli olarak Views klasörüne yeni bir sayfa ekliyor olacağız. Silverlight Business Application ile örneği yaparken sayfaların navigation page olduğu dikkatinizi çekmiştir. Bunun amacı asp.net ve mvc 'den alışık olduğumuz URL Routing 'e benzer bir yapı içermesinden ve sayfalar arası geçişin URI yardımı ile rahatlıkla yapılabilmesinden kaynaklanmaktadır. Şimdi düzenleme yapacağımız sayfayı ekleyebiliriz. Eklemiş olduğunuz sayfanın
<navigation:Page ile başladığını görüyor olacaksınız.
Şimdi ana amacımız grid üzerinden seçilen kaydın değerlerini güncellemektir. Bu işlemi yapabilmek için de seçili olan satırın ID 'sine ulaşıp bu değeri taşımamız gerekmektedir. Bu amaçla formun üzerine bir adet buton ekliyoruz. Butonun içerisinde ID 'den yararlanarak başka bir sayfaya yönlendirecek ve değerleri güncelleyeceğiz. Butonu form üzerine ekledikten sonra üzerine tıklanması anında yapılacak olayları aşağıdaki gibi belirtiyoruz.
private void editEventButton_Click(object sender, System.Windows.RoutedEventArgs e)
{
Event selectedEvent = eventDataGrid.SelectedItem as Event;
if (selectedEvent != null)
{
int eventId = selectedEvent.EventID;
NavigateToEditEvent(eventId);
}
}
private void NavigateToEditEvent(int eventId)
{
Uri target = new Uri("/EditEvent?EventID=" + eventId, UriKind.Relative);
NavigationService.Navigate(target);
} |
YYapmış olduğumuz işlemler yardımı ile Event tablosunun içerisinde yer alan değerlerden seçili olanın ID 'sini yakalayıp EditEvent sayfasına o ID 'den yararlanaraj gerekli yönlendirmeyi yapıyoruz. Şimdi hızlıca yönlendirme işleminin sorunsuzca olup olmadığını test etmek için uygulamayı seçip kontrol edelim.
Sayfayı sorunsuzca yönlendirdik. Şimdi ise bu gelen ID yardımı ile verileri gösterip düzenleme işlemini nasıl yapabileceğimize göz atacağız. EditEvent sayfasına geliyoruz ve Data Source kısmına göz atıyoruz. Verileri gösterirken Event tablosunun içeriğini kullandık ve bu bize otomatik olarak GridView yardımı ile gerçekleştirmiştik. Şimdi aynı işlemi Event tablosunun içerisinde yer alan kolonların detaylarını göstererek yapmak gerekecektir. Bu amaçla Event tablosunun yanında açılan DropDownList 'in içerisinde
Detail seçeneğini seçiyor ve EditEvent sayfasına tabloyu sürüklüyoruz.
Detay kısmına getirdikten sonra form üzerinde sürüklediğimizde bize form kontrollerinden oluşan bir şablon çıkacak ve bunlar iki yönlü olarak veriye bağlanmış olacaktır. Sürükleyip bıraktığınızda karşınıza çıkacak olan şablon aşağıdaki gibi olacaktır.
Sırada yapmamız gereken bu formun içeriğini doldurabilmek amacıyla QueryString'ten yararlanarak EventId 'yi yakalamak ve sonrasında ekrana eklemiş olduğumuz buton ile güncelleme işlemini gerçekleştirmektir.
protected override void OnNavigatedTo(NavigationEventArgs e)
{
string eventIdString = NavigationContext.QueryString["EventID"];
int eventId;
if (int.TryParse(eventIdString, out eventId))
{
eventDomainDataSource.FilterDescriptors.Add(
new FilterDescriptor
{
Operator = FilterOperator.IsEqualTo,
PropertyPath = "EventID",
Value = eventId
});
}
}
private void saveChangesButton_Click(object sender, RoutedEventArgs e)
{
eventDomainDataSource.SubmitChanges();
} |
QueryString ile yakaladığımız EventID 'yi filtre olarak kullanıp sonrasında içerik filtreleme yardımı ile EventID değerine eşit olan değerleri gösteriyoruz. Sonrasında ise Entity Framework 'un güzelliklerinden yararlanarak değişiklikleri kaydet diyerek işlemi tamamlıyoruz. Sonrasında uygulamayı çalıştırıp düzenleme işlemlerini yapıp değiştir dediğimizde yapmış olduğumuz değişikliklerin uygulandığını görmüş oluruz.
Düzenleme işlemlerini nasıl yapabileceğimizi incelemiş olduk. Şimdi ise yeni bir kaydı nasıl ekleyebileceğimizi incelemeye çalışacağız. Yeni bir kayıt eklerken yine Entity katmanından yararlanıyor olacağız. Ayrıca form üzerine var olacak kontrollere önceden bir kaç ön bilgi girerek daha anlaşılır olmasını sağlayacağız. Örneğin tarih kısmında <01.01.2010> gibi örnek bir değer olacaktır.
İşlemlerimize öncelikle bir kayıt ekle butonunu
home.xaml sayfasına ekleyerek başlıyoruz. Sonrasında eklemiş olduğumuz tıklanması anındaki olayına aşağıdaki kod parçasını ekliyoruz.
private void newEventButton_Click(object sender, System.Windows.RoutedEventArgs e)
{
DateTime nowDate = DateTime.Now;
Event newEvent = new Event
{
EventTitle = "<Yeni Aktivite>",
EventVenueName = "<Yer>",
EventDescription = "<Açıklama>",
EventStartDate = nowDate,
EventEndDate = nowDate
};
var ctx = new EventManagerDomainContext();
ctx.Events.Add(newEvent);
ctx.SubmitChanges(createOP =>
{
NavigateToEditEvent(newEvent.EventID);
}, null);
} |
Entity içerisinde bulunan Events koleksiyonuna varsayılan olarak gösterilecek değerleri ekledikten sonra WCF RIA servisi olarak eklemiş olduğumuz EventManagerDomainContext 'ten yararlanarak yeni kayıt eklenmesi için gerekli işlemleri ekledik. Ayrıca kayıt eklenmesi için gerekli formu aktivite düzenlemek için kullandığımız forma yönlendirmek için NavigateToEditEvent metodunu kullanarak gerekli yönlendirme işlemini gerçekleştirmiş oluyoruz.
Not: EventManagerDomainContext farklı isimler ile projenizin içerisinde bulunabilir. Bu tanımlamayı doğru olarak öğrenebilmek için DataSources tabının içerisinde yer alan veri kaynaklarına bakarak öğrenebilirsiniz.
Yaptığımız işlemler sonraında yeni kayıt girme ekranının nasıl gözüktüğüne hızlıca göz atalım.
Sonuç olarak bu yazımızda Silverlight Business Application proje şablonunda WCF RIA servislerini nasıl kullanabileceğimizi temel CRUD işlemleri üzerinde incelemeye çalıştık.
Umarım sizler için yararlı olabilmiştir.
Kaynaklar