3 katmanlı mimarı ve faydaları

Herkese merhabalar ben Recep SELLİ bu makalemizde sizlerle beraber üç katmanlı mimari yapısı nedir faydaları nelerdir bunları inceliyor olacağız.Üç katmanlı mimari projelerimiz içinde kullandığımız veri tabanı bağlantıları,veri tabanı işlemleri (select,insert,update,delete) ve kullanıcı ara yüzünü birbirinden ayıran bir yapı kullanmamızı sağlar.Bu yapıları .Net içerisinde class adı verdiğimiz sayfalarda rahatlıkla hazırlıyabilir ve diğer sayfalarımızda bu classımızı türeterek classımız içerisindeki değişkenlere metotlara ve özelliklere kolaylıkla ulaşabilir ve kullanabiliriz.Üç katmanlı mimaride benim ilk dikkatimi çeken şüphesiz amatörce hazırladığımız projelerde hava uçuşan veri tabanı bağlantılar ve sorgu nesnelerimiz.Üç katmanlı mimaride connection adında hazırlıyacağımız veri tabanı bağlantı classımızı bi kere hazırlayıp istediğimiz sayfada onlarda kodu yazmak yerine sadece türeterek kullanabiliriz.Aynı şekilde hazırlıyacağımız VideoizleDb adındaki classımız içinde ise veri tabanı sorgu işlemlerimiz yer alacak. 

öncelikle projemiz içerisinde bir class oluşturuyoruz. ben bu class’ıma connection adını verdim. classımız içerisine gerekli namespace’leri ekliyoruz.

 

using system.data.oledb; //  access veri tabanı işlemleri için gerekli namespace.

using system.web.configuration; // web.config dosyası içerisinden connectionstring’imizi alabilmemiz için gerekli namespace.

 

daha sonra classımızın yapısı metotu üzerinde oledbconnection nesnemizi tanımlıyoruz.

 

oledbconnection baglanti = new oledbconnection();

 

yapıcı metotumuz içerisinde web.config dosyamız içerisinde yer alan connectionstringimize ulaşalım şimdi.

     

public connection()

   {

string con_string = webconfigurationmanager.connectionstrings["connection"].connectionstring;

  baglanti = new oledbconnection(con_string);

}

 

hemen altında bağlantımızı açmamıza yarayacak olan metodu yazıyoruz.

 

    public void connectionopen()

    {

        try

        {

if (baglanti.state != connectionstate.open)

// bağlantı durumunu kontrol ediyoruz.açık değilse açıyoruz.

                baglanti.open();

        }

        catch(exception ee)

        {

        }

    }

 

 aynı şekilde bağlantımızı kapamaya yarayacak olan metodu yazıyoruz.

 

    public void connectionclose()

    {

        try

        {

            if (baglanti.state != connectionstate.closed)

// bağlantı durumunu kontrol ediyoruz.kapalı değilse kapıyoruz.

                baglanti.close();

        }

        catch (exception ee)

        {

        }

    }

 

evet şimdi arkadaşlar ben ihtiyacima göre geriye oledbdatareader döndüren bir metod yazıyorum.

 

    public oledbdatareader execreader(string sorgu)

    {

        oledbcommand komut = new oledbcommand(sorgu, baglanti);

        connectionopen();

        oledbdatareader dr = komut.executereader();

        return dr;

        connectionclose();

    }

aynı şekilde bana geriye oledbdataadapter , oledbcommand ve döndüren iki metot daha yazıyorum.sırası ile

 

    public oledbdataadapter execadapter(string da)

    {

        oledbdataadapter adapter = new oledbdataadapter(da, baglanti);

        return adapter;

    }

 

      // oledbdataadapter döndüren metodum.

 

          public oledbcommand execcommand(string cmd)

    {

        oledbcommand komut = new oledbcommand(cmd, baglanti);

        return komut;

    }

 

            //  oledbcommand döndüren metodum.

           

      şimdi gelelim bu yapımıza ait bir sorgu classı oluşturmaya oluşturacağımız classda sadece sql sorgularımız yer alıcak.ben bu classımın adına videoizledb.cs adını verdim.

 

classımızı açtık sonra yine gerekli namespace eklemelerini yapıyoruz.

 

using system.data.oledb;

 

sıra geldi connection adındaki veri tabanı ile bağlantı sağlayan classımızı türetmeye classımız içerisinde yapıcı metotumuzun hemen üstünde öncelikle bunu bir sağlayalım.

 

  connection baglanti = new connection();

// veri tabanı ile bağlantı sağlayan classımızı türettik.

 

şimdide bize datatable döndüren bir metod lazım böylece veri tabanından gerekli sorguyu yaptıktan sonra datatable ın içini doldurup istediğimiz yerde kullanabiliriz.

 

    public datatable videolarim(string videoid)

    {

      string sorgu= "select * from videolarim where videoid=" + videoid

oledbdataadapter da = baglanti.execadapter(sorgu);

      datatable dt = new datatable();

      da.fill(dt);

      return dt;

    }

burada dikkat ederseniz. oledbdataadapter ımızı türetmiyoruz sadece connection classımız içerisinde yazdığımız execadapter adındaki metot’a yönlendiriyoruz.böylece connection classımız içerisinde veri tabanına bağlanıp gerekli sorgulamayı yaptıktan sonra bize içi dolu bir  oledbdataadapter gelicek.gelen adaptor nesnesinin içeriğini datatable nesnemize atmak ve bunu istediğimiz sayfada kullanmak kalıyor.

 

şimdi videoizledb classımızın diğer metotlarını yazmaya.isterseniz birde kaydettirme işlemini burda burdan yapalım.ben bunun için yorumkayit adında geriye void (hiçbirşey) döndürmeyen bir metot yazacam.

 

    public void yorumkayit(string yorumadsoyad, string yorumemail, string yorumsite, string yorumicerik, string yorumquery, string yorumip)

    {

        oledbcommand komut = baglanti.execcommand("ınsert into videoyorum(yorumadsoyad,yorumemail,yorumsite,yorumicerik,yorumquery,yorumtarih,yorumip,onay) values(’" + yorumadsoyad + "’ , ’" + yorumemail + "’,’" + yorumsite + "’ ,’" + yorumicerik + "’,’" + yorumquery + "’,’" + datetime.now + "’,’" + yorumip + "’,’" + 0 + "’)");

        baglanti.connectionopen();

        komut.executenonquery();

        baglanti.connectionclose();

    }

 

      // dikkat ederseniz burda da oledbcommand nesnemizi türetmeden connection classımız içerisinden kullandık.

 

şimdi isterseniz bunları videoizle.aspx.cs tarafında kullanalım.gene her zaman ki gibi gerekli namespacelerimizi ekliyoruz.

 

using system.data.oledb;

 

sırada tahmin ettiğiniz gibi connection ve videoizledb classımızı türetmeyi yapacaz. j

 

    connection baglanti = new connection();

    videoizledb videolar = new videovideoizledb();

 

öncelikle videolarim adlı metot ile videoları videoidlerine göre sayfamızda gösterelim.

 

    void videolar()

    {

        int query = convert.toınt32(request.querystring["videoid"]);

        dtvideolar.datasource = videolar.videolarim(query).defaultview;

        dtvideolar.databind();

    }

 

      // datalist (dtvideolar) ile verilerimizi bağlıyoruz ve sitemizde gösteriyoruz.

şimdide yapılan yorumları kaydettirelim.

 

    protected void button1_click(object sender, eventargs e)

    {

            int query = convert.toınt32(request.querystring["videoid"]);

            string text4 = txtyorum.text;

            string temp;

            temp = text4.tolower();

            temp = temp.replace("’", "’");

            videolar.yorumkayit(textbox1.text, textbox2.text, textbox3.text, temp, query,request.servervariables["remote_addr"].tostring());

    }

 

      butonumuza tıkladığında videolar adında videoizledb den türetilmiş olan nesnemiz devreye girecek ve akışı o yöne doğru itecektir. videoizledb ise akış baglanti.connectionopen();  satırına geldiğinde connection classımız içerisinden bağlantımız açılıp akış   oledbcommand komut = baglanti.execcommand satırına gelecek buraya geldiğinde tekrar connection devreye girecek ve sorgu ile veritabanı bağlantısını sağlayıp kayıt işlemi için tekrar bizi videoizledb classına yönlendirecektir.burada kayıt işlemi gerçekleştikten sonra bağlantının kapanması için tekrar connection classına geçiş yapacak bağlantımızı kapayıp clik eventinin işi bitecektir.

 

bir sonraki makalemde tekrar görüşmek üzere…

 

recep selli

 

http://www.recepselli.com


                                                                                                                                   04.07.2008 10:44:38

YORUMLAR

# selamın aleyküm;

güzel bir anlatım olmuş abisi eline sağlık, daha nice güzel paylaşımlarına;

selametle
04.07.2008 10:54:19

Tahsin Murat BAYDUR | MuR@T

:: YORUM YAZ
Ad Soyad :
Email :
Web Site :
Yorum :