Asp.Net Çok Katmanlı Mimari [Döküman TBT]
-
3 Katmanlı Mimarı ve Faydaları
Herkesemerhaba TR_ip & Recep Selli olarak bu makalemizde siz TBT üyelerine elimizden geldiğince üç katmanlı mimari yapısı nedir faydaları nelerdir bunları inceliyor olacağız. Üç katmanlı mimarı projelerimiz içerisinde kullandığımız veri tabanı bağlantısı, veri tabanı işlemleri (insert, update, delete, select) ve kullanıcı ara yüzünü birbirinden ayıran bir yapıyı bizlere sunar. Bu yapıları Net de classlar içerisinde rahatlıkla hazırlayabilir ve diğer sayfalarda bu classlarımızı türeterek classımız içindeki public değişkenlere metotlara ve özelliklere ulaşabiliriz.Üç katmanlı mimarı yapısında benim dikkatimi çeken ilk şey amatörce hazırlığımız projeler havada uçuşan veri tabanı bağlantı ve işlem nesnelerinin nesneleri yerine classımız kullanarak bu işlemleri bir tek yerden merkez noktadan yapmamızı sağlaması oldu.Aynı zamanda bunun bize kazandırdığı zamanın yanı sıra ileride veritabanı değişikliğinde veya aldığımız herhangi bir hatada onlarca satır kod yerine belirli satırlar içinde geziniyor olmamız büyük avantaj.Diğer avantajlarından biri ise hazırladığımız bu classları ileride geliştireceğimiz projeler içerisinde ufak değişiklikler yaparak kullanabilmemiz. Bir yazılım geliştirme şirketinde çalışıyor ve grup olarak proje hazırlıyorsanız anlaşılabilirlik ve geliştirilebilirlik açısından da son derece önemlidir.
Şimdi dilerseniz kod kısmına bakalım birazda.
Öncelikle projemiz içerisinde bir class oluşturuyoruz. Ben bu classıma connection adını verdim. Classımız içerisine gerekli namespaceleri 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 = newOleDbConnection();
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 = newOleDbConnection(con_string);
}
Hemen altında bağlantımızı açmamıza yarayacak olan metodu yazıyoruz.
publicvoid 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.
publicvoid connectionclose()
{
try
{
if (baglanti.State != ConnectionState.Closed)
// Bağlantı durumunu kontrol ediyoruz.Kapalı değilse kapıyoruz.
baglanti.Close();
}
catch (Exception ee)
{
}
}

OleDbDataReader döndüren bir metod yazıyorum.
publicOleDbDataReader ExecReader(String sorgu)
{
OleDbCommand komut = newOleDbCommand(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
publicOleDbDataAdapter ExecAdapter(String da)
{
OleDbDataAdapter adapter = newOleDbDataAdapter(da, baglanti);
return adapter;
}
// OleDbDataAdapter döndüren metodum.
publicOleDbCommand ExecCommand(String cmd)
{
OleDbCommand komut = newOleDbCommand(cmd, baglanti);
return komut;
}
OleDbCommanddö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 = newconnection();
// 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.
publicDataTable Videolarim(int Videoid)
{
String Sorgu= "Select * from videolarim where Videoid=" + Videoid
OleDbDataAdapter da = baglanti.ExecAdapter(Sorgu);
DataTable dt = newDataTable();
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.İsterseniz 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.
publicvoid YorumKayit(String yorumadsoyad, String yorumemail, String yorumsite, String yorumicerik, String yorumquery, String yorumip)
{
OleDbCommand komut = baglanti.ExecCommand("Insert 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 = newconnection();
VideoizleDB videolar = newVideoVideoizleDB();
Öncelikle Videolarim adlı metot ile videoları Videoidlerine göre sayfamızda gösterelim.
void Videolar()
{
int query = Convert.ToInt32(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.
protectedvoid Button1_Click(object sender, EventArgs e)
{
int query = Convert.ToInt32(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 öncelikle bağlantımızın durumuna bakılacak kapalı ise açılacak bu şekilde bağlantı durumunu kontrol etmemizin sebebi projemiz performans artışı içindir.Akış OleDbCommand komut = baglanti.ExecCommand satırına gelince burada tekrar connection classımız 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…
TR_ip & Recep SELLİ
-
Güzel faydalı bişeye benziyoda kardeş gece 2de açtığım gidiyo gibi konu bide heryere recep selli -tbt yazmışsın )
-
Sagolasin haci.
-
yafa13 bunu yazdı:
-----------------------------
Güzel faydalı bişeye benziyoda kardeş gece 2de açtığım gidiyo gibi konu bide heryere recep selli -tbt yazmışsın )
-----------------------------
Evvet hoca.. kendimizi yazdım çünkü baya bi emek verdik uğrastik döküman için güzel birşeyler çıkması için ortaya ve tbt için olsun sadece dedik o yüzden öyle yazdım ama kodlar ı engelliyecek bi durum sergilemiyoru yazılar sanırım... Eyw ComputerWolf ssende sağolasın.. -
Elimize sağlık :P inş. zaman buldukca daha güzel makaleler yazmaya çalışcaz.
-
Ellerine sağlık hoca .. Eğer zaman bulabilirsen bunları videolu anlatım yapabilirsen özelliklede veri tabanı bağlantılı form ilişkileri üzere .. Senden ei si yok valla :)
Veri tabanı muhabbetini aştıktan sonra gerisi yapılır bi şekilde bende ufaktan başlıycm inş .
-
TxT bunu yazdı:
-----------------------------Ellerine sağlık hoca .. Eğer zaman bulabilirsen bunları videolu anlatım yapabilirsen özelliklede veri tabanı bağlantılı form ilişkileri üzere .. Senden ei si yok valla :)
Veri tabanı muhabbetini aştıktan sonra gerisi yapılır bi şekilde bende ufaktan başlıycm inş .
-----------------------------
en basiti veritabanı bence asp.netde..
ben bi zorluk göremedim çok da basit hatta döküman bile yaptım.. önce kullanımı ile ilgili tüm data bölümünün dökümanını yapacam ama biraz zamana ihtiyacım var :D
bu arada hocam eline sağlık güzel olmuş.. -
http://www.recepselli.com/video.aspx burada videolar mevcut direk izleyebilirsin ;)
-
teşekkürler recep çok yararlı bşr döküman
