Koray Kırdinli

Yazılım ve İş Yaşamı Hakkında Paylaşımlar

Tasarım Desenleri – Loose Coupling Prensibi (Esnek Bağ)

Loose Coupling bağımlılıkların azaltılması anlamına gelmektedir.Bağımlılıktan kastedilen ise bir sınıfın içinde başka bir sınıfı direk olarak kullanmaktır. Bir nesne diğer nesnenin ne kadar fazla detayını biliyorsa o nesneye o kadar bağımlı demektir. Mantığımız her zaman kullanılan sınıf değiştiğinde bağımlı sınıf bundan ne kadar etkileniyor bunu tespit etmek olmalıdır. Bağımlılıkların olması kaçınılmazdır fakat bunu kontrol etmek de elimizdedir.

Kumanda

Bağımlılığa klasik bir örnek vermek gerekirse ;

Burada kumanda nesnesi görevini yapabilmek için televizyon nesnesine ihtiyaç duymaktadır , bir diğer tabirle kumanda televizyona bağımlıdır.  Peki bize ne zararı var bu bağımlılığın ;

        Tv olmazsa kumanda bir işe yaramaz.

        Tv değiştiğinde kumanda bu değişimden direk etkilenir.

        Kumanda sadece televizyonu kontrol edebilir başka aletleri kontrol edemez.

 

Kodsal Bağımlılık gösterimi aşağıdaki gibi olabilir. Kumanda sınıfının içerisinde Televizyon nesnesi direk kullanılmıştır. Yanlış!!!!

publicclassKumanda

{

    Televizyon tv = newTelevizyon();

 

    publicvoid TelevizyonAc()

    {

        tv.Ac();

    }

}

 

publicclassTelevizyon

{

    publicvoid Ac()

    {

        Console.WriteLine(“Televizyon Açıldı”);

    }

}

Bu şekilde bir kullanım yerine bağımlılığı azaltmak adına araya bir interface koyulabilir ve artık daha esnek ve genişleyebilir bir yapı elde edebiliriz.Doğru!!!

publicinterfaceIKumanda

{

    void Ac();

}

 

publicclassTelevizyon : IKumanda

{

    publicvoid Ac()

    {

        Console.WriteLine(“Televizyon Açıldı…”);

    }

}

 

publicclassRadyo : IKumanda

{

    publicvoid Ac()

    {

        Console.WriteLine(“Radyo Açıldı…”);

    }

}

 

publicclassKumanda

{

    IKumanda _kmd;

    //Constructor da hangi tip aletin kumandası olduğu belirleniyor.

    public Kumanda(IKumanda kmd)

    {

        _kmd = kmd;

    }

    publicvoid Ac()

    {

        _kmd.Ac();

    }

}

Artık kumandayı aşağıdaki şekide kullanabiliriz.

Kumanda k=newKumanda(newTelevizyon);

k.Ac();

Bu tasarımın bize faydası artık kumanda nesnesini istediğimiz bir nesneyi kontrol edebilecek hale getirdik. Daha sonra ihtiyaçlar değiştiğinde buzdolabı kontrol eden bir kumanda gerektiğinde yapmamız gereken tek şey yine IKumanda interface’inden kalıtım almış bir Buzdolabı sınıfı türetmek. Bu durumda Kumanda sınıfı hiçbir değişikliğe uğramadan buzdolabını da kontrol edebilecektir.

Kod geliştirirken aklımızda bulundurmamız gereken en temel tekniklerden bir tanesini loose couplin’i basit olarak öğrenmiş olduk umarım faydalı olmuştur.

Kaynaklar :

Design Patterns in C# (Software Patterns Series) addison wesley

Java Tasarım Desenleri – Özcan Acar

C# 3.0 Design Patterns

Reklamlar

Ekim 24, 2010 Posted by | C# | , , , , | 15 Yorum

C# ile Globalization

Merhaba arkadaşlar bu makalemizde Globalization konusu üzerinde duracağız. .NET’te farklı coğrafi bölgeler için bölgesel ayarlar oluşturabilmekteyiz. Örneğin Türkiye’de tarih gün-ay-yıl ‘ken başka bir ülkede ay-gün-yıl olabilmekte. İşte burada standardı sağlayabilmek adına .NET içerisinde System.Globalization namespace’i kullanılmaktadır.

CultureInfo sınıfı çalıştığı bilgisayarda yüklü culture’ları alıp kullanabilmemizi sağlayan en temel sınıftır. Culture adı,takvimi,dili, ve alt dilleri temsil eder.

Culture’lar ‘en-US’ , ‘tr-TR’ gibi ifadelerle temsil edilirler
//Mevcut kullanıcının kültürünü almak

CultureInfo c = Thread.CurrentThread.CurrentCulture;          Console.WriteLine(String.Format(“Name:{0},DisplayName:{1},NativeName:{2},ISO:{3}”

    ,c.Name,c.DisplayName,c.NativeName,c.TwoLetterISOLanguageName));

Salary = (10000).ToString(“C”); //Eger tr ise 10.000,00 TL olacaktır.

//Mevcut Kültürleri listelemek

foreach (CultureInfo item inCultureInfo.GetCultures(CultureTypes.SpecificCultures))

     listCulture.Items.Add(item.Name); //en-US,tr-TR …

Bazen kültür bilgisi yeterli gelmez ve daha detaylı bilgiye ihtiyaç duyarız bu durumda RegionInfo devreye girer.

 

//Bölgesel bilgileri almak…

CultureInfo c = Thread.CurrentThread.CurrentCulture;

RegionInfo r = newRegionInfo(c.LCID);

Console.WriteLine(String.Format(“Display:{0},Currency Symbol:{1}”,

    r.DisplayName,r.CurrencySymbol));

 

 

//Mevcut bilgisayardaki kültürde haftanın günlerini listelemek. İstersek spesific bir kültürünki de listelenebilir.

CultureInfo c = Thread.CurrentThread.CurrentCulture;

String[] Days = c.DateTimeFormat.DayNames;

foreach (string day in Days)

{

    listDays.Items.Add(day);

}

//Ayları Listelemek

CultureInfo c = newCultureInfo(“en-US”);

String[] Months = c.DateTimeFormat.MonthNames;

foreach (string month in Months)

{

    listDays.Items.Add(month);

}

 

Mevcut kültürler dışında kendimiz custom kültürlerde oluşturabiliriz. Bunu CustureAndRegionInfoBuilder sınıfı ile yapabilmekteyiz.

 

Herkese iyi çalışmalar.

Ekim 24, 2010 Posted by | C# | , , , , | Yorum bırakın

C# ile Mail Göndermek

Merhaba arkadaşlar bu makalemizde .NET ile E-mail gönderme üzerinde çalışıyor olacağız.

Bildiğiniz gibi e-mail göndermek geliştiricilerin kullanıcıları bilgilendirmek veya rapor göndermek için çok sık kullandığı bir yöntemdir. .NET Framework te bizlere System.NET.Mail isminde bir namespace sağlamış mail gönderebilmek için. Bu mailler düz bir tekst olabileceği gibi HTML şeklinde de olabilir.

Kabaca mail gönderebilmek için

1 – Maili oluşturmak

2 – Maili bir SMTP sunucusuna göndermek gereklidir.

Bir mailin yine kabaca 4 bölümü vardır. Bunlar : Gönderen(Sender),Alıcı(Recipent) ,Subject(Konu),Body(İçerik)

//Tekst mail oluşturma

MailMessage m = newMailMessage(“koraykirdinli@yahoo.com”, “koraykirdinli@gmail.com”, “Başlık”, “İçerik”);

m.To.Add(newMailAddress(“aaa@bbb.com”));

//Eklenti ekleme

Stream sr=newFileStream(@”C:Boot.ini”,FileMode.Open,FileAccess.Read);

m.Attachments.Add(newAttachment(sr,“dosyam”,MediaTypeNames.Application.Octet));

//HTML mail olusturmak

MailMessage m = newMailMessage(“koraykirdinli@yahoo.com”, “koraykirdinli@gmail.com”, “Başlık”, “İçerik”);

m.Body =

Mesajım

;

 

m.IsBodyHtml = true;

 

//Maili Gondermek

SmtpClient client = newSmtpClient();

client.Send(m);

 

 

//HTML mail olusturmak

MailMessage m = newMailMessage(“koraykirdinli@yahoo.com”, “koraykirdinli@gmail.com”, “Başlık”, “İçerik”);

string body = @”

Picture

 

 

;

AlternateView avHtml = AlternateView.CreateAlternateViewFromString(body, null, MediaTypeNames.Image.Jpeg);

LinkedResource pic1 = newLinkedResource(“pic.jpg”, MediaTypeNames.Image.Jpeg);

avHtml.ContentId = “Pic1”;

m.IsBodyHtml = true;

 

//Maili Gondermek

SmtpClient client = newSmtpClient();

client.Send(m);

 

Mail gönderimlerinde genellikle local IIS üzerine bir SMTP Server kurup onun üzerinden göndermek tavsiye edilir.

//Smtp kimlik doğrulama

SmtpClient client = newSmtpClient(“smtp.gmail.com”);

client.Credentials = CredentialCache.DefaultNetworkCredentials;

//veya

client.Credentials = newNetworkCredential(“user”, “password”);

 

Umarım Yararlı Olmuştur.

Ekim 23, 2010 Posted by | C# | , , , , | Yorum bırakın