Çok Katmanlı Mimari

Eyl 08, 2013

Nesneye dayalı programlamada veri tabanı ile ilgili işlemler yapılırken belirli bir sıra ve düzen içinde yapılır. Uygulamalarda; veriye nasıl erişileceği, üstünde ne gibi uygulamalar yapılacağı ve kullanıcı tarafına ne şekilde sunum yapılacağı bir programcı için en önemli sorunlardır. Üç katman mimarisi de tam bu noktada programcılara yardımcı olmaktadır. Üç katmanlı mimari nesneye dayalı programlama ile önem kazanmış ve günümüzde birçok programcının kullanmakta olduğu önemli bir programlama tekniğidir. Üç katmanlı mimari kullanılarak hazırlanan programların yönetilmesi diğerlerine göre daha kolay ve hızlı bir şekilde yerine getirilir. Çünkü üç ayrı katmana uygun olarak hazırlanmış programlarda her yapılan eylem ayrı ayrı tasarlanmıştır ve neyin nerede olduğu açıktır; böylece müdahale edilmesi gereken durumlarda bu işlem kolayca ve zaman kaybetmeden yerine getirilir.

Katmanlı mimari 3 ayrı katmandan oluşmaktadır. Bunlar: Veri Katmanı (Data Layer), İş Katmanı (Business Process Layer) ve Sunum Katmanı (Presentation Layer) olarak sıralanabilir.

  • Üç katmanlı mimaride en alt katman verinin veritabanından çekilmesi ve gelen verinin veritabanına eklenmesi işleminin yapıldığı veri katmanıdır (Data Layer). Veri katmanı ile veritabanında hazırda bulunan veriler uygulamaya çekilir. Aynı şekilde uygulama ortamına kullanıcı bazlı girilen verilerin de hazırda bulunan veritabanına kaydedilmesi işleminde de veri katmanına ihtiyaç duyulur.
  • Oluşturulan uygulamaya veri katmanı vasıtasıyla çekilen veriler direkt olarak entegre edilemez. Çünkü veri katmanıyla sadece veriler uygulama ortamına çekilmiştir fakat üstünde yapılacak olan işlemler hala belli değildir. Bunun için çekilmiş olan verilerin yapılan uygulamaya uyarlama işlemi yerine getirilmelidir. Bu da iş katmanı (Business Layer) ile sağlanmaktadır. İş katmanı ile oluşturulan programa uyarlanmış veriler artık hazır hale gelmiştir.
  • En son olarak ise uygulamanın kullanıcı ile etkileşimi olan arayüzün yapılandırıldığı sunum katmanı (Presentation Layer) gelmektedir. Sunum katmanı ile iş katmanında hazır hale getirdiğimiz verilerin artık kullanıcıya gidecek olan görünümü belirlenir ve artık oluşturduğumuz uygulama tamamen bitmiştir.

Yukarıda anlatıldığı gibi üç katmanlı mimari etkileşimli bir şekilde uygulanmaktadır. Önce veri katmanı (Data Layer) ile veriler veritabanından çekilir, iş katmanı (Business Layer) ile bu verilerin uygunluğu sağlanır ve sunum katmanı (Presentation Layer) ile bir arayüz oluşturulup kullanıcıya veriler gösterilir. Bu işlem tam tersi yönde de yapılabilir, yani kullanıcı arayüz vasıtasıyla veri girişi yapar (Sunum katmanı), girilen veri veritabanına uyguna hale getirilir (İş katmanı) ve son olarak veri tabanına aktarılır (Veri katmanı). Anlaşılacağı üzere üç katmanlı mimari etkileşimli bir şekilde uygulanmaktadır. Aşağıda bu yapının daha net anlaşılması için uygulama verilmiştir.

Uygulama:

  1. İlk olarak veriler ile uygulama arasındaki etkileşimin sağlanılması gerekir. Yani veri katmanı (Data Layer) oluşturulmalıdır. Bunun için "DAL" isimli sınıf (class) oluşturuldu ve veriye erişim sağlanmış oldu:

    public class DAL
    {
        private Database database;
        public Database Database
        {
            get
            {
                if (database == null)
                   database = DatabaseFactory.CreateDatabase("conn");
                return database;
            }
        }
        public void Kaydet(string isim, string soyisim, string telefon)
        {
            Database.ExecuteNonQuery("Ekle", isim, soyisim, telefon);
        }
        public DataSet Listele()
        {
            return Database.ExecuteDataSet("Listele");
        }


  2. Sırada iş katmanı (Business Layer) olarak adlandırılan kısım gelir. Bu kısımda oluşturulan uygulamanın işleyişi gösterilmektedir:

    public class Kayit : dataAccess
    {
        public Kayit() { }
        private string isim;
        public string Isim
        {
            get { return isim; }
            set { isim = value; }
        }
        private string soyisim;
        public string Soyisim
        {
            get { return soyisim; }
            set { soyisim = value; }
        }
        private string bolum;
        public string Bolum
        {
            get { return bolum; }
            set { bolum = value; }
        }
        public Kayit(string isim, string soyisim, string bolum)
        {
            Isim = isim;
            Soyisim = soyisim;
            Bolum = bolum;
        }
        public void Kaydet(string isim, string soyisim, string bolum)
        {
            DataAccessLayer.Kaydet(isim, soyisim, bolum);
        }
    }
    public class KayitListesi : dataAccess
    {
        public KayitListesi() { }
        private List<Kayit> kayitList;
        public List<Kayit> KayitList
        {
            get
            {
                if (kayitList == null)
                {
                    kayitList = new List<Kayit>();
                    DataSet ds = DataAccessLayer.Listele();
                    foreach (DataRow item in ds.Tables[0].Rows)
                        kayitList.Add(new Kayit
                                   (item["isim"].ToString(),
                                   item["soyisim"].ToString(),
                                   item["bolum"].ToString()));
                }
                return kayitList;
            }
        }
    }
    public class dataAccess
    {
        public dataAccess() { }
        private DAL dataAccessLayer;
        public DAL DataAccessLayer
        {
            get
            {
                if (dataAccessLayer == null)
                   dataAccessLayer = new DAL();
                return dataAccessLayer;
            }
        }
    }

  3. Son olarak sunum katmanı (Presentation Layer) olarak adlandırılan katman gelir ve bu katmanda uygulamayı kullanacak olan kişiler için yapılan arayüz gerçekleştirilir:

    public partial class _Default : System.Web.UI.Page
    {
        private KayitListesi kayitlar;
        public KayitListesi Kayitlar
        {
            get
            {
                if (kayitlar == null)
                   kayitlar = new KayitListesi();
                return kayitlar;
            }
        }
        protected void Page_Load(object sender, EventArgs e)
        {        
            if (!IsPostBack)
               VeriBagla();
        }
        protected void btKaydet_Click(object sender, EventArgs e)
        {
            Kayit kayit = new Kayit();
            kayit.Kaydet(txtIsim.Text, txtSoyisim.Text, txtBolum.Text);
            VeriBagla();
            gvKayitlar.Visible = true;
        }
        protected void VeriBagla()
        {
            gvKayitlar.DataSource = Kayitlar.KayitList;
            gvKayitlar.DataBind();
        }
    }

      Uygulamanın arka planında çalışacak olan kod kısmı yukarıda gösterildi. Bu uygulamanın kullanıcılara gözüken arayüzü şu şekilde olacaktır:

      • İlk olarak veri girişinin yapılacağı sayfa gelmektedir:




      • Veri girişi yapıldıktan sonra aynı sayfanın alt bölümünde veriler listelenmektedir. Bunun ekran çıktısı ise aşağıdaki gibi olacaktır: