C# Data Caching ve Uygulama Senaryosu

By Burak TUNGUT - 1.12.2013 - 11 Yorum - Kategori C#

Proje KatmanlarıUzun, hatta baya bir uzun aradan sonra herkese merhabalar :)

Haziran 2013'de yazdığım son makaleden sonra yaklaşık 6 ay geçmiş. Açıkçası nasıl geçti bu kadar zaman anlamış değilim. Neyse. Klişe lafları bırakıp işimize bakalım :)

Bu makale de Data Caching konusunu ele alıyor olacağız. Makaleyi yazmadan önce anlaşılır ve uyarlanabilir olması için daha önce bir kaç projede kullandığım yapı üzerinden ilerlemeye ve bunu bir diyagrama dökmeye karar verdim.

Açıkçası hayatımda ilk kez bir diyagram hazırladım (Yazılım Mühendisliği derslerinde ki Use-Case ve UML'leri saymazsak tabi ki :) ). 

Yapacağımız örnekte ki projeleri (katmanları) Presentation ve Infrastructure olmak üzere ikiye ayırdım.
Presentation kısmını 1 adet Asp.Net MVC projesi üstleniyor olacak. Bunun haricinde Business, Data-Access, Caching ve Core katmanları ise Infrastructure içerisinde olacaklar.

Senaryo ve Akış

Üretiminde içinde bulunduğunuz, senaryosu ürün bazlı olan bir Web projesi düşünün. Ya da kısa bir değiş ile bir E-Ticaret sitesi. Üst tarafta kategoriler, solda markalar ve layoutda listelenen ürünler. Şimdiye kadar ki kısımda pek sorunumuz yok.

Peki her bir ürüne tıkladığımızda (ürünün detay sayfasına gittiğimizde) arka tarafta bir SQL sorgusunun çalıştığını size hatırlatsam. Hatta bir de sitemizin popüler olduğunu söylesem. Bence daha fazla ileriye gitmeye gerek yok. Sorunların ortaya çıkması için yeterli neden saydım gibi :)

Devamı

C# Castle Windsor ve IoC Container Kullanımı

By Burak TUNGUT - 13.6.2013 - Kategori C#

Herkese Merhabalar,

2. sınıfa veda ettik, güzel bir yaza girişte yaptık derken farkettim ki uzun süredir makaleleri aksattımsmiley Daha fazla arayı soğutmadan hemen bir makaleye giriş yapalım.
Bir önceki makalemde C# ile Dependency Injection ve Loosely Coupling konusuna değinmiştik.Inversion of Control Container Aslında makalenin sonunda bu konuya daha farklı bir bakış açısı ile devam edeceğimizden bahsetmiştim.

Öyle sanıyorum bir önceki makalemde verdiğim örnekten dolayı artık sıkı bağlı tiplerden ve bu formu sağlayacak kodlamalardan uzaklaşacağız. Zaten makalede verdiğimiz örneği, Dependency Injection'ın hakkını vererek tekrar revize etmiş idik.

IoC Container

Bu makale de ise olayı bir kademe daha ileriye taşıyacağız. Bir önceki makale de işi yürütecek ve bundan önce instance alma işlemini yapacak kısmı bir metotda yapıyorduk. Böyle bir yapıda ise, söz konusu tipe işimiz her düştüğünde bir instance daha alınacak ve aynı işlemler tekrarlanacak.
Oysaki IoC Container'lar sayesinde, instance işlemini bir kereliğe mahsus yaptırabilir ve tipi kullanacağımız her bir işlemde ise bir önceki instancenin kullanılmasını sağlayabiliriz.

Envarterlerin İndirilmesi

Şu anda yapacağımız işlemlere karar verdik. Sıra sorunumuzu çözecek babayiğit bir IoC kütüphanesi bulmakta. Aklıma ilk gelen Microsoft ürünü olan, Ninject ve Castle Projects adı altında geliştirilen Windsor kütüphanesi.

Bu makalemde Windsor kütüphanesini kullanıyor olacağız. Tabi ki kodlama kısmına geçmeden önce kütüphanemizin en son sürümünü buradan indirelim.
İndirdiğimiz dosya içerisinden Castle.Core ve Castle.Windsor kütüphanelerini projemize ekleyelim.

Mouse ve Base Tiplerimiz

Hatırlarsanız bir önceki makalede son olarak bir adet IMouse adında bir interfaceimiz ve bu interfaceyi implemente eden iki farklı mouse tipimiz mevcuttu. Toplam da bu 3 tipi yeni projemiz de yine kullanıyor olacağız. Bu nedenle aşağıdaki tipleri projemize dahil edelim.

interface IMouse
    {
        void Write();
    }

 

class LogitechMouse : IMouse
    {
        public void Write()
        {
            Console.WriteLine("Logitech Mouse Kullanıldı");
        }
    }

    class A4TechMouse : IMouse
    {
        public void Write()
        {
            Console.WriteLine("A4Tech Mouse Kullanıldı");
        }
    }

Devamı

C# ile Dependency Injection ve Loosely Coupling

By Burak TUNGUT - 6.5.2013 - 1 Yorum - Kategori C#

Düzgün ve detaylı bir analiz yapılmadan geliştirme sürecine geçilmiş bir çok projenin eninde sonunda başvurduğu nadide yöntemlerden biridir Dependency Injection.

Dependency Injection ve Loosely Coupling Genellikle geliştirme sürecinde ihtiyaç duyulan gereksinimlere göre yapılan projelerde bir sorun görülmese de, zamanla ihtiyaçların artacağı ve sıkı bağlı tipler ile geliştirilmiş projelerde ciddi sıkıntılar yaşanabilmektedir.

Az önce güzel bir anahtar kelimeden bahsetti; sıkı bağlı!
Aslında biz bu anahtar kelimeden ziyade, bunun tam tersi ile ilgileniyor olacağız. Yani; gevşek bağlı (Loosely Coupled).

Gevşek bağlı tipler ile çalışmanın en büyük faydası projenin ilerleyen zamanlarda gelişime açık ve rahatça revize edilebilmesidir.

Konuyu ilk hakimiyeti sağlamanın en güzel yolu kanımca göresellerdir. Bunun için yandaki gibi fareye bağımlı olmuş bir insan elini örnek alabiliriz smiley

Günlük Hayattan Bir Senaryo

Bir proje yapıyor olalım. Bu projenin bir aşamasında da kullanıcının fareyi ara bir tip ile kullanması gerektiğiniz düşünelim.

Proje tahmin edileceği üzere düzgün bir şekilde analiz edilmediği için farenin hiç bozulmayacağı ya da fareden beklenen ihtiyaçların hiç değişmeyeceği düşünüldü. Bu nedenle de sokakta görülen ilk bilgisayarcıdan bir fare alındı ve kullanıcının eline tıpkı resimde olduğu gibi verildi smiley

Bir müddet sonra fark ettik ki elimizdeki fare artık bizim ihtiyaçlarımızı karşılayamıyor. Bu durumda akla gelen ilk çözüm o fareyi atıp, yerine yeni bir fare almak olacaktır. Tabi ki yazılım geliştirme ve revize işlemlerindeki süreçler ne yazık ki günlük hayattan verdiğimiz bu örnekteki gibi olmuyor blush

Senaryonun Yazılım Tarafı

Şimdi ise düşündüğümüz bu senaryoyu C# ile uygulamaya dökelim. Bunun için LogitechMouse adlı bir sınıf tasarlıyor ve içerisinde ekrana kullanılan farenin markasını yazacak Write adlı bir metod yazıyorum.

class LogitechMouse
    {
        public void Write()
        {
            Console.WriteLine("Logitech Mouse Kullanıldı");
        }
    }

Bir de mouse ile kullanıcı arasındaki entegrasyonu sağlayacak ara bir sınıf daha yazıyorum. Bu sınıfımızın adı da MouseManager şeklinde olsun ve içerisindeki Use metodu tetiklendiğin de bir adet LogitechMouse sınıfından instance alsın ve Write metodunu tetiklesin.

Devamı

C# Constructors Metotlar

By Burak TUNGUT - 21.11.2012 - Kategori C#

Bu yazımıda C# da Constructors yani yapılandırıcı metotlar konusunu işliyor olacağız.
Yazımız ile sınıflar konusunda da örnekler yapmış olacağız.

Bu zamana kadar bizim ürettiğimiz ya da dolaylı yoldan instance alıp kullandığımız sınıfların public üyelerine kendimiz ulaştık ya da sınıf içersindeki çeşitli metotları kullandık. 
Constructors metotlar ise bir nesnenin, sınıftan instance aldığı zamanlarda üye değişkenlerine otomatikmen verdiği değerler ile yardımımıza koşan bir yapıdır.

Değer tipleri ve referanslar arasındaki farkları işlediğim konuda hatırlayacak olursanız referans tipleri oluşturulduğu anda default değerlere sahip oluyorlardı. Aslında bunun tek nedeni oluşturduğumuz anda ilgili sınıfın içersindeki defaurlt constructors metotunun tetiklenmesidir.

Şimdi Constructors konusunu tam anlamıyla ele alalım ve bir örnek yapalım. Ancak örnekden önce Constructors metotları diğer metotlardan ayıran iki özellikten bahsetmek istiyorum ;

  1. Constructors methotların geri dönüş değerleri yoktur.
  2. Constructors metotlar ilgili sınıf ile aynı isimde olmak zorundadırlar.
namespace Makale.Test
{
    public class User
    {
        public string Username { get; set; }
        public int Age { get; set; }
        public bool IsAdmin { get; set; }

        public void WriteInformations()
        {
            Console.WriteLine(this.Username);
            Console.WriteLine(this.Age);
            Console.WriteLine(this.IsAdmin);
        }
    }

    class Program
    {
        static void Main(string[] args)
        {
            User user = new User();
            user.WriteInformations();
        }
    }
}


Uygulamada çalıştığı anda default constructors devreye girecek ve tüm propertylerin default değerlerini yazacaktır.
Şimdi ise oluşabilecek tüm durumlar için constructors metotlarımızı yazalım.

Devamı

C# Bilinçli Tür Dönüşümü

By Burak TUNGUT - 21.11.2012 - Kategori C#

Bu makalemiz de Bilinçli Tür Dönüşümleri konusunu, checked ve unchecked anahtar kelimeleriyle tanışacağız.
Bilinçsiz Tür Dönüşümleri hakkında yazdığımız makaleye ve yaptığımız örneklere buradan ulaşabilirsiniz.

Explicit yani Bilinçli tür dönüşümleri, genellikle derleyicinin ve IDE'nin izin vermediği durumlarda kullandığımız bir yapıdır ve olması muhtemel veri kayıpları söz konusu olduğu için ise son derece dikkatli bir şekilde yapılmaları gerekir.
Tıpkı bir önceki konuda olduğu gibi bilinçli tür dönüşümlerinide Büyükten Küçüğe ve Küçükten Büyüğe dönüşüm şeklinde ikiye ayırabiliriz fakat, Büyükten Küçüğe yapılan tür dönüşümleri bilinçsiz tür dönüşümleri ile tıpatıp aynı olduğu için bu konu üzerinde fazla vakit harcamayacağız.

Öncelikle tür dönüşümü yapmak için kullancağımız syntax yapısını inceleyelim,

            [DönüştürülecekTip] [DeğişkenAdı];
            (int) sayi;
            (byte) _byte;
            (decimal) _ondalik;

Bir önceki konuda yaptığımız tipik dönüşümü tekrarlayalım ve yine bir byte veriyi integer veriye çevirelim,
 

namespace Makale.Test
{
    class Program
    {
        static void Main(string[] args)
        {
            byte _byte = 350;
            int _int = (byte)_byte;

            Console.WriteLine(_int);
        }
    }
}


Ekran çıktımız 50 şeklinde olacaktır. Burada değinmek istediğim bir konu var. Bir önceki makaledede aynı örneği yaptık ama (byte) gibi bir ifade yani bilinçli tür dönüşüm ifadesi kullanmadık ve yine aynı sonucu elde ettik çünkü byte veri türü, int veri türünden daha küçüktü ve dönüşümünde herhangi bir sakınca yoktu.

Devamı
1 2 3
Facebook
Son Yorumlar