Builder Pattern ve Windows Phone Asenkron Programlama

Eylül 2012 | Ahmet Küçükoğlu, Yazılım Geliştirme Uzmanı
Windows Phone 7 için hazırladığım bir uygulamada Widget'ların olması gerekliydi. Hava Durumu, Döviz Kurları, Günün Uygulaması vb. Ama bu widgetler hep aynı kalmayacak ve sürekli yeni widgetlar eklenecekti. Bu sebeple mimarinin Enterprise kurulması gerekliydi.

Widget'ların temel çalışma mantığı; widget aktif hale getirildiğinde "x" bir wcf servisine gidilerek gerekli olan dataları çekmek. Yalnız asenkron şekilde bu işlemleri yapmak gerekiyordu. :) Asenkronu severim.


Adım 1

Interface class oluşturarak işe başladım. Ama dikkat ederseniz class'da event tanımladım. Çünkü işlemler asenkron yapıldığı için işlemin bitiminde callback bir metodun çağrılması gerekli ve dataların o metoda aktarılması gerekli.

public interface IWidget
{
event CompletedHandler CompletedWidget;

string WidgetName { get; set; }
string Description { get; set; }
string ImagePath { get; set; }

void Initialize();
}


Event için gerekli olan delegate tanımlamasını yapıyoruz. Bu kısımda işimiz bitti.

public delegate void CompletedHandler(object result, Exception error);


Adım 2
Artık widgetlarımızı oluşturabiliriz. Widget tanımlamamız aşağıdaki gibi olacaktır.

Currency Widget (Döviz Kurları)

public class CurrencyWidgetBuilder : IWidget
{
public CompletedHandler CompletedWidget { get; set; }
public string WidgetName { get; set; }
public string Description { get; set; }
public string ImagePath { get; set; }

public void Initialize()
{
//Business Code
}
}

Adım 3

Widget'ımızı da hazırladıktan sonra geriye kalan widgetlarımızı çalıştıracak "Business Class" tanımlamak.

public static class WidgetBuilder
{
public static void Build(IWidget widget)
{
widget.Initialize();
}
}



Widget Kullanımı

CurrencyWidgetBuilder currency = new CurrencyWidgetBuilder();
currency.CompletedWidget += new CompletedHandler(currency_CompletedWidget);
WidgetBuilder.Build(currency);