Hemen hemen her büyük projede kullanılan, iş görüşmelerinde sıkça sorulan bir konuya değineceğim bugün, katmanlı mimariden bahsederken aynı zamanda bir örnek üzerinden gideceğiz. Nedir bu katmanlı mimari dersek;
Katmanlı Mimari projelerimizin daha derli toplu durmasını sağlayan, kodun okunulabilirliğini arttıran, ekip çalışmasını arttıran, hata yönetiminin kolay olmasını sağlayan bir yapıdır. Aslında bu yapı ile proje yazımını bir standart hale getirmiş oluyoruz. Bu yapı 3 ana katmandan oluştuğu gibi günümüzde Çok Katmanlı Mimari yapıda denebilir. Ama aslında 3 ana katman üzerinde durur. Bu katmanlar;
- Veri Katmanı ( Data Layer )
- İş Katmanı ( Business Layer )
- Sunum Katmanı ( Presentation Layer )
dır. Şimdi hadi bu yapıları açıklamaya geçelim.
Veri Katmanı ( Data Layer )
Bu katman adından da anlaşılacağı üzere veriler ve veritabanı ile uğraşacağımız bölümdür. Bu katmanda veri tabanı bağlantısı yapılıp, veri tabanında bulunan tablolar için sınıflar oluşturulur. Tabi bunun için veritabanımızın bulunması gerekiyor. Örnek bir veritabanı kullanılabilir bunun için. Ben Northwind veri tabanını kullanacağım.
Veritabanımızı ekledikten sonra kodlara geçeceğiz. Bunun için ilk önce veritabanı bağlantısı yapmamız gerekmekte. Bağlantı adresimizi yazdıktan sonra bağlantımızı açıyoruz. Ardından verileri çekmemiz için bir sorgu oluşturmalıyız. Farklı farklı tablolardan veri çekip alabiliriz. Bu yüzden böyle bir fonksiyon oluşturuyoruz.
// Bağlantı adresimizi yazıp, bağlantıyı açıyoruz public SqlConnection OpenConnection() { SqlConnection baglanti = new SqlConnection("Server=.;database=Northwind;trusted_connection=true"); baglanti.Open(); return baglanti; } // Her sorgu oluşturduğumuzda buradan yararlanacağız. public SqlCommand CreateConnection(string sorgu) { SqlCommand sqlCommand = new SqlCommand(sorgu, OpenConnection()); return sqlCommand; }
Veritabanı na bağlanma işlemlerini gerçekleştirdik. Gerektiğinde sorgu yazmak için hazırlık da yaptık. Şimdi ise veri tabanında bulunan hangi tablo üzerinde uğraşacağımızdır. Eğer bütün tablolar ile uğraşacaksanız bütün tabloları eklemeniz gerekmekte. Ben sadece Müşteriler tablosuyla uğraşacağım için bunu ekliyorum. Veritabanımda hangi sütun varsa buraya da o tip olacak şekilde ekliyorum. “prop” yazarak kolay bir şekilde oluşturabilirsiniz. Sonrasında bir Constructor oluşturarak verileri ekliyorum.
public class Musteriler { public string MusteriID { get; set; } public string SirketAdi { get; set; } public string MusteriAdi { get; set; } public string MusteriUnvani { get; set; } public string Adres { get; set; } public string Sehir { get; set; } public string Bolge { get; set; } public string PostaKodu { get; set; } public string Ulke { get; set; } public string Telefon { get; set; } public string Faks { get; set; } public Musteriler(string musteriID,string sirketAdi, string musteriAdi , string musteriunvani, string adres, string sehir, string bolge, string postakodu, string ulke,string telefon,string faks) { this.MusteriID = musteriID; this.SirketAdi = sirketAdi; this.MusteriAdi = musteriAdi; this.MusteriUnvani = musteriunvani; this.Adres = adres; this.Sehir = sehir; this.Bolge = bolge; this.PostaKodu = postakodu; this.Ulke = ulke; this.Telefon = telefon; this.Faks = faks; }
İş Katmanı ( Business Layer )
Bu katmanda ise asıl olaylar başlıyor. Veritabanından verileri hangi sorguyla alacağımızı, verileri nasıl okuyacağımızı , verileri okuduktan sonra ne yapacağımızı bütün bu olayları bu katmanda yapıyoruz. Aslında veritabanıyla projemiz arasında bir köprü oluşturmayı sağlıyor.
Ben bu örnekte sadece veri çekme işlemleri yapacağım. Eğer siz daha sonradan başka işlemler isterseniz beraber gidebiliriz. Veri çek adında bir fonksiyon oluşturduktan sonra çektiğim verileri bir listede tutması için bir liste oluşturuyorum. Ardından veri katmanında oluşturduğumuz bağlantı açma ve sorgu yazmak için veri katmanında ki bağlantı açma ve sorgu yazma fonksiyonları alıyorum. Ardından verileri okuyorum. Verileri okuduktan sonra Müşteriler adında ki sınıfıma atıyorum. Sonrasında her musteriyi listeme ekliyorum. Burada işim aslında bu kadar. Bu katmanda temel CRUD işlemlerini yapabilirsiniz.
public List<Musteriler> TakeData() { // Bütün müşterileri bir liste içinde tutacağım List<Musteriler> musteriler = new List<Musteriler>(); Veri veritabani = new Veri(); SqlConnection connection = veritabani.OpenConnection(); SqlCommand sqlCommand = veritabani.CreateConnection("SELECT MusteriID,SirketAdi,MusteriAdi," + "MusteriUnvani,Adres,Sehir,Bolge,PostaKodu,Ulke,Telefon,Faks from Musteriler"); SqlDataReader dataReader = sqlCommand.ExecuteReader(System.Data.CommandBehavior.CloseConnection); while(dataReader.Read()) { Musteriler musteri = new Musteriler( dataReader["MusteriID"].ToString(), dataReader["SirketAdi"].ToString(), dataReader["MusteriAdi"].ToString(), dataReader["MusteriUnvani"].ToString(), dataReader["Adres"].ToString(), dataReader["Sehir"].ToString(), dataReader["Bolge"].ToString(), dataReader["PostaKodu"].ToString(), dataReader["Ulke"].ToString(), dataReader["Telefon"].ToString(), dataReader["Faks"].ToString()); musteriler.Add(musteri); } connection.Close(); return musteriler; }
Sunum Katmanı ( Presentation Layer )
Bu katmanda ise veritabanında çektiğimiz verileri kullanıcıya sunma katmanımızdır. Dilerseniz mobil uygulama, dilerseniz windows form uygulaması dilerseniz de bir konsol uygulaması yapın. Burası size kalmış. Bu katmanda daha çok sayfalarımızın olacağı katmandır. Kullanıcıya bu katmanda ulaşacağız. Kullanıcı dilerse buradan veri çekme işlemini başlatacak dilerse burada temel işlemleri yapacak. ben bu uygulamada basit bit konsol uygulaması yaptım ama dediğim gibi siz istediğinizi yapabilirsiniz.
Burada ilk olarak İş Katmanında bulunan sınıfımdan yardım alıyorum verileri çekmek için. Zaten iş katmanında verileri çekmek için gerekli olan her şeyi yapmıştık. Bir liste oluşturuyorum. Bu listenin tipi Müşteriler tarzında olacak. İş katmanından gelen Müşteri listesini almak için. Sonrasından iş katmanından gelen müşterileri bu listeye alıyoruz. Aldıktan sonra bu listeyi gezmemiz gerekiyor. Foreach ile gezip ekrana yazdırıyoruz. İşlemimiz bu kadar.
List<Musteriler> musteriListe = new List<Musteriler>(); Helper helper = new Helper(); musteriListe = helper.TakeData(); foreach (Musteriler item in musteriListe) { Console.WriteLine(item.MusteriID + " " + item.SirketAdi + " " + item.MusteriAdi + " " + item.MusteriUnvani + " " + item.Adres + " " + item.Sehir + " " + item.Bolge + " " + item.PostaKodu + " " + item.Ulke + " " + item.Telefon + " " + item.Faks); } Console.ReadKey();
Ekran çıktığımız aşağıda ki gibidir.
Katmanlı Mimari denmesinin sebebi ise her işlemin farklı farklı katmanlarda gerçekleşmiş olmasından kaynaklanıyor. Ben bu projede tek proje üzerinden gidip farklı klasörler içinde sakladım. Lakin siz her katman için farklı projelerde oluşturabilirsiniz.
Eğer projeye ulaşmak isterseniz buradan ulaşabilirsiniz.
Eğer sorularınız olursa mail veya yorum atarak bana ulaşabilirsiniz.
Comments (7)
Jacksays:
Cumartesi Ağustos 29th, 2020 at 14:47Birçok yerde video izledim,makaleler inceledim vb. ama burda anlayabildim.Anlatım olsun,örnekleme olsun çok başarılı.
Tebrikler…
osan tosyalısays:
Perşembe Temmuz 15th, 2021 at 09:26hocam proje örneğine ulaşılmıyor…mail adresime gönderebilirmisiniz..
eren yeagersays:
Salı Kasım 23rd, 2021 at 09:28entity framework denen olay katmanlı mimari midir hocam
omersezersays:
Perşembe Kasım 25th, 2021 at 17:30Aslında birbirinden farklı kavramlar. Entity framework, Microsoft tarafından geliştirilmiş bir frameworktur. KAtmanlı Mimari ise bu yazıda bahsettiğim gibi.
Darkin Kılıcı Aatroxsays:
Perşembe Ekim 27th, 2022 at 12:51Merhaba çok yararlı bir açıklama olmuş ama hala bazı kısımları anlamadım sizin sorununuz değil ben malım
Mehmetsays:
Cuma Mayıs 19th, 2023 at 13:42güzel anlatım teşekkürler, uygulama linki ölü indiremedim. indirebilmem için link gönderebilirmisiniz. teşekkürler
omersezersays:
Pazar Temmuz 30th, 2023 at 17:13Selamlar, en kısa zamanda düzeltip gönderiyor olacağım.