Kategoriler: Asp.Net

Asp.NET ile 3 Katmanlı Mimari

Hazırladığımız yazılımlarda bir, iki, üç veya daha fazla katmanı kullanarak programlar geliştiririz. Farkında olmadan bu katmanları kullanırız fakat nedir bu katmanlı mimari ? Bu makaleyi, Asp.NET ve MSSQL üzerinden anlatacağım.

Diyelim ki bir basit öğrenci kayıt programı hazırladınız.Bunun için öncelikle bir veritabanınız ve arayüzünüz olmalı.Arayüz ile öğrenci kaydı, silme, listeleme gibi işlemler yaparsınız.Bunun için bir veritabanı da gerekli.Ayrıca olmayan bir kaydı silmek, aynı 2 kişiyi eklemek gibi işlemler için kontrol yapacak olan bir birime de ihtiyacınız var.İşte biz buna üç katmanlı mimari diyoruz.Bu katmanlar;

Kullanıcı ile etkileşimi sağlayacak olan Sunum Katmanı, veritabanı ile etkileşimi yapacak olan İş Katmanı ve verilerimizi saklayacak olan Veri Katmanı.Yazılımlar için yüksek performans ve yönetim kolaylığı sağlayan katmanlar bunlardır

Eğer siz iş katmanı kullanmaz iseniz arayüz ve veritabanından oluşan mimarilere 2 katmanlı mimari denir.Ayrıca isterseniz 3 den fazla katmana sahip mimarileri de kullanabilirsiniz.Bunlar gelişmiş uygulamalarda tercih edilir.Ben en sık kullanılan 3 katmanlı mimariden bahsedeceğim;

***Peki bu 3 katmanlı mimariyi kullanmanın avantajı nedir?

Bu mimariyi kullanarak yazılımımızı parçalara böleriz.Bunun tabiki en büyük avantajı yönetim kolaylığı sağlamasıdır.Yani eğer programımızda bir hata oluşursa, bunun hangi katmandan kaynaklandığını rahatlıkla anlayabiliriz.Ayrıca bir yerde değişiklik yapmak istediğimizde yazılımı baştan aşağı inceleyerek hatayı bulmak yerine, ayırdığımız katmanlarda oluşturduğumuz fonksiyonlara, sınıflara bakarak kolayca bulabiliriz.Bu sayede yüksek performans elde ederiz ve nesne yönelimli yaklaşımı da kullanarak gelişmiş yazılımlar elde edebiliriz.

Şimdi biz bu makalemizde basit bir öğrenci ekleme çıkarma işlemi yapan bir programı kullanarak anlatımımıza başlayalım.

Veri Katmanı

Eğer veritabanı kullanan bir proje yapacaksanız,arayüzden önce veritabanını tasarlayın.Ben bunun için MSSQL ‘i kullanarak bir veritabanı oluşturacağım

Veritabanımızın adını ogrenci, tablo adımızı ise ogrenciler olarak ayarlayalım.No kısmını Primary key olarak ayarlayalım ve İdentity özelliğini Yes ve 1 yapalım.Yani kendizi otomatik ve 1 er 1 er artsın.Biz bu No kısmına dokunamayız

Ve şimdi veri katmanımız için ekleme işlemini yapacak olan stored procedure‘umuzu yazıyoruz.Ben sadece ekleme ve silme işlemini yapacak olan stored procedure yazacağım.Stored Procedure eklemeyi bilmiyorsanız eski yazılarımdan bakabilirsiniz

CREATE PROCEDURE ekle
(
 @ogr_ad nvarchar(30),
 @ogr_soyad nvarchar(30),
 @ogr_bolum nvarchar(50),
 @ogr_sinif nvarchar(10)
)
AS
INSERT INTO ogrenciler (ogr_ad,ogr_soyad,ogr_bolum,ogr_sinif)
VALUES (@ogr_ad,@ogr_soyad,@ogr_bolum,@ogr_sinif) 
GO

Bakın bu ekleme görevi yapan Stored Procedure’de ogr_no kısmını eklemedik çünkü o kendisi ekleyecek ve değerini 1 arttıracak (her öğrenci eklemede) . Şimdi ise silme görevi yapacak olan Stored Procedure yazıyoruz

CREATE PROCEDURE sil
 @ogrenci_no int
  AS
  DELETE FROM ogrenciler WHERE (ogr_no=@ogrenci_no)
 GO

Bu procedure, aldığı ogrenci_no değerini veritabanındaki ogr_no değişkenine atar.Sadece ogr_no değerini kullanıcıdan alır.Ve bu numaraya eşit olan ogrenciyi siler (tüm bilgileriyle beraber)

 

İş Katmanı

Bu katman, veritabanı ile arayüz arasında etkileşimi sağlar.Biz bunları sınıflar ile yaparız.Bunun için iyi derecede Nesneye yönelik programlama bilmeniz gerekir.Bu katman sayesinde hataları kısa sürede bulabiliriz ve yazacağımız  kod satırları ile 2 katmanı birbirine bağlayabiliriz.Bu 3 katmanlı mimaride, sunum katmanına ise en az yükü bırakırız.En önemlisi de budur

Dediğimiz gibi bu katman için sınıflar oluşturmamız gerekir.Bu sınıflar, stored procedure’e değerler gönderir.Şimdi Visual Studio üzerinde Solution Explorer‘de bulunan projemize sağ tıklayarak Add New İtem diyelim bir Class ekleyelim

Eklediğimiz class’a veri ekle diyelim ve aşağıdaki kodları yazalım

public class veriekle
{
 public string ogrenciAd, ogrenciSoyad, ogrenciBolum, ogrenciSinif;
 public void veriekleme()
 {
  SqlConnection con = new SqlConnection("Data source=.;Initial Catalog=ogrenci;Integrated Security=SSPI");
  con.Open();
  SqlCommand cmd = new SqlCommand();
  SqlParameter prm1 = new SqlParameter("@ogr_ad", SqlDbType.NVarChar, 30);
  SqlParameter prm2 = new SqlParameter("@ogr_soyad", SqlDbType.NVarChar, 30);
  SqlParameter prm3 = new SqlParameter("@ogr_bolum", SqlDbType.NVarChar, 50);
  SqlParameter prm4 = new SqlParameter("@ogr_sinif", SqlDbType.NVarChar, 10);
  prm1.Value = ogrenciAd;
  prm2.Value = ogrenciSoyad;
  prm3.Value = ogrenciBolum;
  prm4.Value = ogrenciSinif;
  cmd.Parameters.Add(prm1);
  cmd.Parameters.Add(prm2);
  cmd.Parameters.Add(prm3);
  cmd.Parameters.Add(prm4);
  cmd.CommandType = CommandType.StoredProcedure;
  cmd.CommandText = "ekleme";
  cmd.Connection = con;
  cmd.ExecuteNonQuery();
  con.Close();
 }
}

verisil adında aynı şekilde bir sınıf daha oluşturuyoruz ve aşağıdaki kodları sınıfın içerisine yazıyoruz

public class verisil
{
 public int ogrenciNo;
 public void verisilme()
 {
  SqlConnection con = new SqlConnection("Data source=.;Initial Catalog=ogrenci;Integrated Security=SSPI");
  con.Open();
  SqlCommand cmd = new SqlCommand();
  SqlParameter prm1 = new SqlParameter("@ogrenci_no", SqlDbType.Int);
  prm1.Value = Convert.ToInt32(ogrenciNo);
  cmd.Parameters.Add(prm1);
  cmd.CommandType = CommandType.StoredProcedure;
  cmd.CommandText = "silme";
  cmd.Connection = con;
  cmd.ExecuteNonQuery();
  con.Close();
 }
}

Görüldüğü gibi iş katmanı, aldığı değerleri işler ve veritabanındaki stored procedurlere gönderir.Bu katman, yazılımlar için çok önemli göreve sahiptir.İş katmanında, class’larımızı da oluşturduktan sonra sıra geldi sunum katmanına.En basit katman burasıdır ve kod olarak fazla yüklenilmemesi gerekir.Yapacağımız örnekte, kod kısmına sadece birkaç satır yazacağız

 

Sunum Katmanı

Ekle butonumuzun click olayına şunları yazalım;

protected void Button1_Click(object sender, EventArgs e)
{
 veriekle yeniogrenci = new veriekle();
 yeniogrenci.ogrenciAd = TextBox2.Text;
 yeniogrenci.ogrenciSoyad = TextBox3.Text;
 yeniogrenci.ogrenciBolum = TextBox4.Text;
 yeniogrenci.ogrenciSinif = TextBox5.Text;
 yeniogrenci.veriekleme();
}

Sil butonumuzun click olayına ise şu kodları yazalım;

protected void Button2_Click(object sender, EventArgs e)
{
 verisil silinen = new verisil();
 silinen.ogrenciNo = Convert.ToInt32(TextBox1.Text);
 silinen.verisilme();
}

Yapacağımız yazılımları bu mantığı kullanarak yaparsak, oluşacak hataları kolay sezeriz ve parçala yönet sistemi ile de hızlıca hataları bulabiliriz

Mehmet Kirazlı

İstanbul Eyüp'te ikamet ediyorum. Giresun Alucra'lıyım. Bilgisayar Mühendisliği bölümünden 2013 yılında mezun oldum. "Yeni Başlayanlar için Java 8" kitabının yazarıyım. Şu anda özel bir firmada Mobil Yazılım Geliştirme Uzmanı olarak çalışıyorum.

Yorumları Göster

  • Teşekkürler güzel bir makale olmuş.

    Yanlız aklıma takılan bir şey oldu.
    Sizin örneğinizdeki durumlar için;

    Ogrenci için class
    OgrenciEkleme için class
    OncenciSilme için class yaptıktan sonra OgrenciEkleme ve Ogrenci Silme classları Ogrenci clasından öğrenci bilgilerini olsa daha mantıklı olmaz mı ya da bu şekilde yapılması doğru mudur?

    Üzerinden yaklaşık 1.5 yıl geçmiş ama eğer görür ve cevaplarsanız sevinirim.
    İyi çalışmalar.
    Kolay gelsin.

    • Tabi o şekilde daha mantıklı ama olay bazında silme ve ekleme işlemlerini göstermek istediğim için kalıtım konusunda çok değinmek istemedim. Tabiki dediğiniz gibi işler yürür.

  • teşekkürler;
    Herşey tamam peki bu uygulamayı 3 farklı sunucuya nasıl dağıtacağız ve çalıştıracağız
    bd bir sunucuda app bir sunucuda web bir sunucuda çalışacak şekilde neler yapmamız gerekmektedir?

  • Merhaba

    Bu makaledeki kullanımı Asp.net MVC projesine uygulayabilir miyiz?

    Klasik olarak windows form, asp.net gibi uygulamalar geliştirirken, solution explorer da sağ tıklayıp add->new project şeklinde BusinessLayer, DataLayer ve WinUI katmanlarını oluşturuyordum.

    Ancak Asp.net MVC de yukarıdaki mantık ile oluşturursam MVC'nin içindeki controller katmanında herhengi bir işlem yaptırmamış olacağım çünkü zaten BusinessLayerda işlem yapıyorum.

    İnternette araştırdığımda youtube da şöyle bir video buldum.

    https://www.youtube.com/watch?v=UMGi3u1gc5o

    Bu videodaki kullanım doğru mudur? Eğer doğru ise mvc içindeki model ve controllerda nasıl işlem yapmam uygun olur?(Çünkü BusinessLayer ve DataLayer da model ve controllerda yaptığım işlemleri yapıyorum)

    İyi çalışmalar

Son Gönderiler

Android Firebase Event (not set) Hatası Çözümü

Merhaba. Firebase Events'e istatistik attığınızda not set şeklinde bir değer görüyorsanız olası çözümünü göstereceğim. (daha&helliip;) Daha Fazla Oku

% gün önce

Namaz Vakitleri Uygulaması Yayında

Merhaba. Android cihazlar için hazırladığım Namaz Vakitleri uygulaması ile 200'e yakın ülkede tüm namaz-ezan vakitlerini… Daha Fazla Oku

% gün önce

Kaza Namazı ve Oruç Takip Uygulaması

Selamlar. İnsanlar için faydalı olması amacıyla geliştirdiğim Kaza Namazı ve Oruç Takip Uygulamasını sizlere tanıtmak… Daha Fazla Oku

% gün önce

Android Volley Kullanımı ve JSON Parse İşlemleri

Volley, Android uygulamalarımızda kullandığımız AsyncTask'ın alternatifi olarak ortaya çıkarılan, Google I/O 2013 sunumunda duyurulan bir… Daha Fazla Oku

% gün önce

Android ButterKnife Kütüphanesi Kullanımı

Merhaba. Bu yazımda Android platformunda kullanıma sunulan, bazı kod bloklarını basitleştiren ve okunabilirliği arttıran ButterKnife… Daha Fazla Oku

% gün önce

Admob TikTok Reklamları Engelleme

Merhaba. Bu yazımda artık baş belası olmuş TikTok reklamlarını, Android uygulamalarımızdaki Admob reklamlarından nasıl kaldıracağımızı… Daha Fazla Oku

% gün önce