Recep SELLİ - Kişisel Web Sitesi Ana Sayfa | Hakkımda | Makalelerim | Videolarim | RSS RSS | İletişim
İçerik Kategorileri
Anket
Web Projelerinde Hangi Teknolojiyi Kullanıyorsunuz ?

E-mail Adresini Ekle


  •              
Tema
Kaynaklar
Takip Ettiklerim

3 katmanlı mimarı ve faydaları


Herkese merhabalar ben Recep SELLİ bu makalemizde sizlerle üç katmanlı mimari yapısı nedir, faydaları nelerdir bunları inceliyor olacağız.

Artıları
1 Zamandan tasarruf.
2 Daha kolay adapte olma.
3 Daha kolay anlaşılabilir kod parçaları.
4 Hata riskinin en aza inmesi.
5 Yapılacak değişiklerde sadece belli noktaları değiştirerek köklü değişiklikler.
6 Modülerlik, Yazdığımız class’ları birçok yerde veya projede kullanabilme.

Üç katmanlı mimarı projelerimiz içerisinde kullandığımız veri tabanı bağlantısı, veri tabanı işlemleri (insert, update, delete, select, vb.) ve kullanıcı ara yüzünü birbirinden ayıran bir yapıyı bizlere sunar.
Çok katmanlı mimari yapısının kullanım sebeplerinden birisi ve bence en önemlisi tekrar eden satır sayısını ortadan kaldırılmasıdır. Yani yazdığımız satırlar mümkün olduğunca tekrar etmemelidir. Tekrar etmeyen satırlar sayesinde projemize daha fazla hükmederiz buda bize ve bizden sonra proje ile ilgilenecek kişilere (yazılımcı arkadaşlara) daha kolay bir adapte olma seçeneği sunar.

Bir tek yerde yazılan kod parçacıkları birçok yerde kullanılarak merkez kod parçacıkları oluşturmak temel amaçtır.
Bu amaç doğrultusunda hareket etmeden önce kesinlikle yapılacak işlemler hakkında genel bir analiz yaparak gereksiz kod yığınlarından projelerimizi arındırmalıyız.
Böylece yazdığımız kodlar sade, kolay anlaşılabilir ve devam ettirilebilir olabilir. Bunun yani sıra tekrar etmeyen satırlar sayesinde zamandan tasarruf ettiğimiz kadar oluşabilecek hataları da en aza indirgemiş oluruz.

İleride yapabileceğimiz herhangi bir değişiklikte yine sadece daha önceden hazırladığımız merkez noktaları değiştirerek projemizde köklü değişiklikler yapabiliriz. Oluşabilecek hatalar durumunda ise onlarca gereksiz satır arasında gezinmek yerine ise merkez noktalarda hatayı aramak bize gene zamandan büyük bir tasarruf sağlamaktadır.

Bu yapıları Net de class’lar içerisinde rahatlıkla hazırlayabilir ve diğer sayfalarda bu class’larımızı rahatça kullanabiliriz.Yazdığımız class’ları zamanla geliştirerek istekler ve ihtiyaçlar doğrultusunda kendi framework yapımızı oluşturabilir ve bu yapıyı istediğimiz yerde kullanabiliriz.Asp net için yazdığımız bir class’ı hiçbir değişiklik yapmadan Win form veya console uygulamalarında rahatlıkla kullanabilmek sanırım hepimize büyük bir keyif verir.

Üç katmanlı mimari yapısı adında anlaşılabileceği gibi projemizde üç ayrı katmandan oluşan bir yapıyı bizlere sunar. En alt katman diyebileceğimiz birincil katmanımız Data Layer(Veri katmanı) bu katman diğer katmanlardan bağımsız bir biçimde çalışarak bizlere kendisinden istenen verileri işler ve hazır konuma getirir.
Orta katman diyebileceğimiz ikinci katmanımız ise Business Layer(İş katmanı) bu katman diğer iki katman ile sürekli bir bağlantı içindedir en üst katmandan (biraz sonra bahsedeceğimiz) gelen istekleri hazırlayan ve Data Layer ile haberleşen bu katmandır. Projemizin bütün iş kuralları burada yer alır ve buradan çıkan sonuçları en üst katmana sunar.
En üst katmanımız ise Presentation Layer(Sunum katmanı) orta katmandan gelen verileri kullanıcıya göstermek için hazırlanır. Bu katman içerisinde herhangi bir işlem yapılmaz. Sadece orta katman ile haberleşmesi sağlanarak kullanıcının girdiği verileri orta katmana iletir ve kullanıcıya sonuçları gösterir.
 Data Layer katmanı için yapabileceğimiz şey öncelikle veri tabanı bağlantısını sağlamak olacaktır. Öncelikle ben projemize connection adında bir class ekliyorum. connection classımız içinde eklememiz gereken namespace’leri (isim uzayları) projemize dâhil ediyorum. Birinci namespace’miz veritabanımız ile bağlantımız sağlayacak olan System.Data.OleDb; akabinde web.config dosyamızdan ConnectionStrings’i çekebilmemizi sağlayacak olan namespace’i ekliyorum System.Web.Configuration;

Class’ımız içinde Constructor(Yapıcı Metot) üstünde bir tane baglanti adında OleDbConnection tanımlıyorum.Yapıcı metodumuz içerisinde web.config dosyamdan ConnectionStrings’imi çekip bağlantımızı sağlıyorum.

C# için bağlantımız.

OleDbConnection baglanti;
public connection()
 {
        String con_string = WebConfigurationManager.ConnectionStrings["connection"].ConnectionString;
        baglanti = new OleDbConnection(con_string);
 }



Vb.Net için bir tane Sub yazalım con adında.

Public coon As New OleDbConnection
 Public Sub con()
        If ConfigurationManager.ConnectionStrings("connection").ConnectionString Is Nothing OrElse ConfigurationManager.ConnectionStrings("connection").ConnectionString.Trim()= " " Then
            coon.ConnectionString = ConfigurationManager.ConnectionStrings("connection").ConnectionString
        Else
            coon.ConnectionString = ConfigurationManager.ConnectionStrings("connection").ConnectionString
        End If
End Sub

Şimdi ihtiyaçlarımız doğrultusunda bi kaç metot daha yazalım ve business layer’a geçelim.Bağlatımızı açıp kapayacak olan metotları, OleDbDataAdapter , OleDbCommand döndüren metotları yazalım dilerseniz.

C# için database bağlantımızı açacak olan metodumuz.

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)
        {
            ee.Message.ToString();
        }
 }



C# için database bağlantımızı kapatacak olan metodumuz.

public void connectionclose() 
 {
        try
        {
            if (baglanti.State != ConnectionState.Closed)
               // Bağlantı durumunu kontrol ediyoruz kapalı değilse kapıyoruz.
                baglanti.Close();
        }
        catch (Exception ee) 
        {
            ee.Message.ToString();
        }
 }



Vb.Net için database bağlantımızı açacak olan metodumuz.

Public Sub connectionopen()
        Try
            If coon.State <> ConnectionState.Open Then
                ’Bağlantı durumunu kontrol ediyoruz açık değilse açıyoruz.
                coon.Open()
            End If
        Catch ex As System.Exception
        End Try
End Sub



Vb.Net için database bağlantımızı kapatacak olan metodumuz.

Public Sub connectionclose()
        Try
            If coon.State <> ConnectionState.Closed Then
                ’Bağlantı durumunu kontrol ediyoruz kapalı değilse kapıyoruz.
                coon.Close()
            End If
        Catch ex As Exception
        End Try
End Sub

Şimdi sırada OleDbDataAdapter ve OleDbCommand döndüren metotlarımızı yazalım.Bu metotlarımız birer parametre alıcaklar.Tahmin edersiniz ki bu parametreler bizlere business layerda yazılan sorguları Data layer’a taşımak için yarayacaklar

C# için OleDbDataAdapter döndüren metodumuz.

public OleDbDataAdapter ExecAdapter(String sorgu) 
 {
        OleDbDataAdapter adapter = new OleDbDataAdapter(sorgu, baglanti);
        return adapter;
 }



C# için OleDbCommand döndüren metodumuz.

public OleDbCommand ExecCommand(String sorgu) 
 {
        OleDbCommand command = new OleDbCommand(sorgu, baglanti);
        return command;
 }



Vb.Net için OleDbDataAdapter döndüren metodumuz.

Public Function ExecAdaptor(ByVal Sorgu As String) As OleDbDataAdapter
        Dim adap As OleDbDataAdapter= New OleDbDataAdapter(Sorgu, coon)
        Return adap
End Function



Vb.Net için OleDbCommand döndüren metodumuz.

Public Function ExecCommand(ByVal Sorgu As String) As OleDbCommand
        Dim command As OleDbCommand = New OleDbCommand(Sorgu, coon)
        Return command
End Function

Dikkat ederseniz tanımladığımız bütün metotların başında public erişim belirleyicisini kullandık nedeni gayet açık bu metotları business layer’da ulaşıp kullanacağız. Benim data layer da yapacaklarım bu kadar sizler ihtiyaçlarınıza göre bu katmanı istediğiniz kadar genişletebilirsiniz. Şimdi business layer’a geçelim. Ben VideoVideoizleDB adında bir class daha açıyorum.Önce açtığımız bu class içerisinde data layer’imizi türetiyoruz.

C# için.

connection baglanti = new connection();



Vb.Net için.

Dim baglanti As connection = New connection()

Hemen arkasından ben videolarımı getirmesi için bir metot yazıyorum.

C# için videolarımı getirecek metot.

public void Videolar(DataList DtVideolar,int VideoID) 
 {
       DataTable dt = new DataTable();
       OleDbDataAdapter da = baglanti.ExecAdapter("Select * from videolarim  where Videoid=" + VideoID);
       da.Fill(dt);
       DtVideolar.DataSource = dt.DefaultView;
       DtVideolar.DataBind();
 }



Vb.Net için videolarımı getirecek metot.

Public Sub Videolar(ByVal DtVideolar As DataList, ByVal VideoID As Integer)
        Dim dt As DataTable = New DataTable()
        Dim da As OleDbDataAdapter = baglanti.ExecAdapter("Select * from videolarim where Videoid=" & VideoID)
        da.Fill(dt)
        DtVideolar.DataSource = dt.DefaultView
        DtVideolar.DataBind()
End Sub

Burada dikkat ettiyseniz dışarıdan bir integer değere göre sorgumuzu düzenliyoruz ve diğer parametremiz olan DtVideolar DataList’imize gelen veriyi DataTable yardımı ile dolduruyoruz.Hatırlarsanız business layer’dan bahsederken bu katmanda projemizin iş kurallarının bulunduğu katman diye söz etmiştik.Burada sanırım integer tipindeki VideoID değişkenimize gelicek değere göre DataTable’in dolması oldukça basit bir iş kuralıdır.Evet arkadaşlar şimdi de OleDbCommand için yazdığımız metodumuzu kullanalım.Ben burda dışarıdan kullanıcın yazdığı yorumu kendi database’ime kayıt ettireceğim.

C# için kayıt yapacak metodumuz.

public void YorumKayit(String yorumadsoyad, String yorumemail, String yorumsite, String yorumicerik, int yorumquery, String yorumip, String onaysifre) 
 {
        OleDbCommand command = baglanti.ExecCommand("Insert into videoyorum(yorumadsoyad,yorumemail,yorumsite,yorumicerik,yorumquery,yorumtarih,yorumip,onay,onaysifre) values(’"+ yorumadsoyad + "’,’"+ yorumemail +"’,’"+ yorumsite +"’,’"+ yorumicerik +"’,’"+ yorumquery +"’,’"+ DateTime.Now +"’’"+ yorumip +"’,’"+ 0 +"’,’"+ onaysifre +"’)");
        baglanti.connectionopen();
        command.ExecuteNonQuery();
        baglanti.connectionclose();
 }



Vb.Net için kayıt yapacak metodumuz.

Public Sub YorumKayit(ByVal yorumadsoyad As String,ByVal yorumemail As String,ByVal yorumsite As String,ByVal yorumicerik As String,ByVal yorumquery As Integer,ByVal yorumip As String,ByVal onaysifre As String)
       Dim command As OleDbCommand = baglanti.ExecCommand("Insert into videoyorum(yorumadsoyad,yorumemail,yorumsite,yorumicerik,yorumquery,yorumtarih,yorumip,onay,onaysifre) values(’"& yorumadsoyad &"’,’"& yorumemail &"’,’"& yorumsite &"’,’"& yorumicerik &"’,’"& yorumquery &"’,’"& DateTime.Now &"’,’"& yorumip &"’,’"& 0 &"’,’"& onaysifre &"’)")
       baglanti.connectionopen()
       command.ExecuteNonQuery()
       baglanti.connectionclose()
End Sub

Bu iki metot ilede dışarıdan sitemizi ziyaret eden kullanıcının yaptığı yorum içeriğini database’imize yazdırmış olduk.Evet arkadaşlar business layer’da benim yapacaklarım şimdilik bu kadar dikkat ettiyseniz burada da yazdığımız metodları public erişim belirleyicisini kullanarak tanımladık çünkü bunları presentation layer’da kullanıcağız.Siz ihtiyaçlarınız doğrultusunda daha geniş ve detaylı bir business layer hazırlayabilirsiniz.Şimdi sırada son katmanımız presentation layer yavaş yavaş sona geliyoruz. Burada daha öncede dediğim gibi herhangi bir iş kuralımız falan bulunmayacak sadece kullanıcıya veri göstermek ve kullanıcının girdiği veriyi database yazmak için gerekli olan DataList ve TextBox’larımızın içeriğini business layer’a gönderecek. Şimdi bir aspx sayfa açalım projemizde ve adını da videoizle.aspx yapalım.Açtığımız sayfanın html tarafında ben bir tane DataList koyuyorum adını da Dtvideolar olarak değiştiriyorum bir tane buton ve bi kaç tane TextBoxda koyuyorum.Code-behind kısmında VideoVideoizleDB class’ımızı hemen türetelim.

C# için.

VideoVideoizleDB videolar = new VideoVideoizleDB();



Vb.Net için.

Dim videolar As VideoVideoizleDB = New VideoVideoizleDB()

Sayfamızın Page_Load’ında business layer’da yazdığımız Videolar adlı metotu çağıralım.Hatırlarsanız bu metotumuz 2 parametre alıyordu Birisi DataList diğeri int VideoID

C# için videoların Page_Load’da gösterimi.

VideoVideoizleDB videolar = new VideoVideoizleDB();
protected void Page_Load(object sender, EventArgs e)
 {
        if (!IsPostBack) 
        {
             int VideoID = Convert.Toint32(Request.QueryString["Videoid"]);
             videolar.Videolar(Dtvideolar, VideoID); 
        }
        else
        {
        
        } 
 }



Vb.Net için videoların Page_Load’da gösterimi.

Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
        If Not Page.IsPostBack Then
            Dim VideoID As Integer = Convert.ToInt32(Request.QueryString("Videoid"))
            videolar.Videolar(Dtvideolar, VideoID)
        End If
End Sub

Evet şimdide sırada son işlemimiz olan videolara yapılan yorumları kaydetme işleminde bunuda hemen çok kolay bir şekilde yapalım.Daha önceden sayfamıza yerleştirdiğimiz butona çift tıklayıp clik event’ine gerekli kodları yazıyoruz.

C# için videolara yapılan yorumların kayıt işlemi.

protected void Button1_Click(object sender, EventArgs e)
 {
        int VideoID =Convert.Toint32(Request.QueryString["videoid”]);
        String Temp = FCKeditor1.Text;
        Temp = Temp.ToLower().Replace("’", "’");
        String onaysifre =”Recep”
        videolar.YorumKayit(TextBox1.Text, TextBox2.Text, TextBox3.Text, Temp, VideoID,Request.ServerVariables["REMOTE_ADDR"].ToString(), onaysifre);
 }



Vb.Net için videolara yapılan yorumların kayıt işlemi.

Protected Sub Button1_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles btnYedek.Click
        Dim VideoID As Integer = Convert.ToInt32(Request.QueryString("Videoid"))
        Dim Temp As String = FCKeditor1.Text
        Temp = Temp.ToLower().Replace("’", "’")
        Dim onaysifre As String = "Recep"
        videolar.YorumKayit(TextBox1.Text, TextBox2.Text, TextBox3.Text, Temp, VideoID,Request.ServerVariables("REMOTE_ADDR").ToString(), onaysifre)
End Sub

Bir makalemizin daha sonuna geldik arkadaşlar altını çizgili kırmızı olarak yazdığımız metotları diğer classlarda yazdığımızı bir daha hatırlatıyım.Böylece sizlere çok katmanlı mimari hakkında bildiklerimi sunmaya çalıştım umarım faydalı olmuştur.Her ne kadar bizler burada basit iki işlem için katmanlı mimari yapısını kullanmış olsak da sizler daha detaylı katmanları bu veya buna benzer şekillerde hazırlayabilirsiniz. Katmanları sadece üç olarak ayırt etmeyede biliriz iş gereksimleri ve projenin büyüklüğü katman sayısında artış veya azalış sağlayabilir unutmayın ki bu işlerin iyice karışmasınada sebeb olabilir. Ben Recep SELLİ bol kodlamalar. Ömer ÖZÜLKÜ hocama teşekkürler.

Asp.net 30.12.2008 10:26:24

YORUM YOK


YorumlarYorum Yaz
Ana Sayfa | Hakkımda | Makalelerim | Videolarim | RSS | İletişim