Derinlemesine yazılım eğitimleri için kanalımı takip edebilirsiniz...

C# N-Tier Architecture(Çok(n) Katmanlı Mimari)

Bu yazımda C#’ta çok katmanlı mimari yapısından bahsedeceğim.Kodlamalar sırasında işimizi kolaylaştıracak katmanlar mevcuttur.Genelde üç katman yapısı standarttır.İhtiyaca göre katman sayısı arttırılıp azaltılabilir.Çok katmanlı mimarinin tercih edilme nedeni proje yönetiminin kolay olması,ekip çalışmasına uygun olması,hata yönetiminin kolay olması vs. gibi nedenlerden tercih edilir..Şimdi gelin bu katmanlar nedir, nasıl kullanılır görelim.

Genel olarak standart üç katman vardır demiştim.Ben bu yazımda bu standart katmanları tanıtacağım.

  • DAL(Data Access Layer)-Veri Erişim Katmanı
  • BL(Busines Layer)-İş Katmanı
  • PL(Presentation Layer)-Sunum Katmanı

Genel prensip, veritabanı işlemleri DAL tarafından, o veritabanının kullanılıp data manipülasyonlarının yapılması işlemi de BL tarafından yapılmalı ve sonuçlar PL ye gönderilmelidir.Sunum katmanın da,kod arkasında sadece verilerin gösterilmesini sağlayan kodların yazılması makbuldür.Yani sunum katmanın da veritabanı ile ilgili hiçbir işlem olmamalıdır.
Bu katmanlar oluşturulurken klasörler içinde oluşturulabileceği gibi, eğer birden fazla projede kullanılması hedefleniyorsa dll ler olarakta oluşturulabilirler.Yazacağımız uygulamayla ilgili bilgi vermek gerekirse Northwind tablosunda çalışacağız.PersonelId,Adi,SoyAdi,Unvan ve Sehir kolonlarını çekeceğiz.
Şimdi bu katmanların nasıl kullanıldığına sırasıyla bakalım.
DAL(Data Access Layer)-Veri Erişim Katmanı için bir sonraki sayfaya geçiniz.

Bunlar da hoşunuza gidebilir...

24 Cevaplar

  1. kubra kara dedi ki:

    Merhaba bana çok katmanlı mimari hakkında yardımcı olur musunuz.
    Acil cevap..
    hazır bir programı çok katmanlı mimariye çevirmeyi istiyorum ama yapamıyorum..

    • Gençay dedi ki:

      Merhaba Kübra,
      Çok katmanlı mimari yapısı bir yöntem ya da algoritmadan ziyade adı gibi standart kabul edilebilen bir mimari olduğu için bu konu hakkında detaylı bir projeye şahit olunmadığı sürece tam kapsamıyla anlamlandırılamaz.
      Lakin var olan bir projeyi çok katmanlı mimariye çevirmek diye birşey söz konusu değildir.Çünkü bu mimari bir projenin alt yapısını yani temelini oluşturmaktadır.DAL, BL, Entity vb. katmanlar kullanılmakta ve gerektiği zaman kendi katmanınızı ihtiyacınıza uygun oluşturabilir ve hiyerarşiye entegre edebilirsiniz.Böyle bir mimari alt yapısında proje tercih ediliyorsa, o projeye baştan başlanmalıdır.Var olan projelerin çok katmanlı mimariye uyarlanması çok uğraştırıcı olacak ve bir o kadar da anlamsız.Bunun en büyük sebeplerinden birisi, eylemsel metodların bulunduğu BL katmanına işlemlerin gerekli Entityleri eşliğinde yordamların derlenmesi ve gerekli yerlerde kullanılmasıdır.

      Bunların aksine dişini sıkabilen her türlü kodu ihtiyacı lehine tabikide değiştirebilir.Bu imkansız değil…

      Saygılarımla

  2. SEMA TUFAN dedi ki:

    Sizin çok katmanlı mimari için vermiş olduğunuz örneği uygularken bir hata aldım.
    Error 1 Using the generic type ‘System.Collections.Generic.List Hatası nedenini biliryormusunuz

    • Gençay dedi ki:

      Gördüğünüz gibi bu hata önceden tanımlanmış bir hatadır.Yani bir çok durumda söz konusu hata alınabilir.Haliyle benzer durumlarda olsa, bir çok yerde bu hatayla karşılaşılabilir ve hatanın sebebine ilgili kodlara göz atarak yorum yapmak üç aşağı beş yukarı bir teşhise yol açabilir.O yüzden yazıyı her ne kadar ben yazmış olsam da hatayı nerede, nasıl, ne yaparken aldığınızla ilgili bir bilgi vermeden nedenini soruyorsanız eğer probleminizin çözümüne odaklı bir cevaptan ziyade size tek cevabım bu hatanın genel nedeni olacaktır.

    • Rec dedi ki:

      List’i şu şekilde kullanırsan düzelir;
      List

  3. Batur dedi ki:

    Bu programları uygularken alt alta direk yazıyormyuz hepsini öyle daha iyi anlıcam gibi şuan pek birşey anlamadım, Bu yapının kullanılmasının tek nedeni daha düzenli olması mıdır birde?

    • Gençay dedi ki:

      Bu yapının kullanılmasının tek nedeni düzenli bir kod atmosferi değildir tabi ki de.Bir çok faydası vardır ve profesyonel bir çerçevede standartlara uygun kod olanağı sunmaktadır.Ben 3 5 sayarım, bu mimariyi kullanan ise çok daha fazla faydasına vakıf olacaktır.

  4. Enes dedi ki:

    Merhaba şöyle bir sorum olacaktı şimdi BL de bir baglantı oluşturup açmışsınız yalnız sorgu oluştur methodunu çağırarak ikinci bir baplantı açıyorsunuz birini iş sonunda kapatırken diğeri de kapanıyormu acaba ? yada ikisine de gerek var mı ? Buraya bir açıklık getirebilirseniz memnun olurum.

    • Gençay dedi ki:

      Bu makaledeki kodlamaya göre “SorguOlustur” metodu içerisinde oluşturulmuş SqlConnection nesnesi kapatılmamaktadır. Dikkatiniz doğrultusunda gözden kaçırmış olduğum bir noktaya parmak bastınız. Velhasıl bazen yazılan makalede olayın izahı kodların göz ardı edilmesine sebep olabilmektedir 🙂 Buda zamanında yanlışlıkla gözden kaçmış bir kod fazlalığıdır diyelim…
      Sevgiler…

  5. ertuğrul dedi ki:

    Merhaba Gençay bey, öncelikle çok teşekkürle bilgi paylaşımınız için, ben c# programlama da daha yeniyim, daha doğrusu nesnel programlamada yeniyim. Çok katmanlı mimari kullanımına geçmek için öğrenmem gerekenleri sıralayabilirmisiniz, diller ve o dillerde hangi konular.Çok teşekkürler şimdiden

    • Gençay dedi ki:

      Merhaba Ertuğrul Bey,
      Sorunuza verilecek cevabı nasıl sınırlayacağımı bilemediğim için kısaca aşağıdaki genel maddelere dikkat etmenizi tavsiye edebilirim.

      • Önce dilin Syntax dediğimiz sözdizimi kurallarını iyi bileceksiniz. Anlayacağınız dilin gramerini öğreneceksiniz.
      • Ardından Prosedürel Programlama yapılarını öğreneceksiniz. Bunun için bir kaynak kitap yahut video seçerek OOP’ye kadar olan tüm konuları belirleyebilirsiniz.
      • Bunlar dışında OOP yapılarını tam ve net öğreneceksiniz.

      Ve herşeyden önemlisi programlama için çalışmayı göze alabilmek önemlidir. Çalışmanın verimi içinse doğru kaynak çok daha önemlidir. O yüzden piyasayı araştırınız. En doğru kitap, video, kurum(ki kurumdan öte hoca önemlidir) vs.. kaynakları tarayıp, değerlendirin. Ardından öğrenme sürecine başlayıp, çalışarak, kendiniz birşeyler katarak ve üreterek hızla öğrenmeye başlayabilirsiniz…

      Sevgilerimle…

  6. emre dedi ki:

    classın ismi Personel olsa daha iyi olurmuş. Personeller bir List ismi olur ancak.

  7. Taha dedi ki:

    Selamlar Gençay Bey,
    Merak ettiğim birkaç husus var. ASP.Net’de çok katmanlı mimari de hazır olan mimariyi kullanmak yerine kendi mimarimi nasıl yazabilirim? bu olay c# Design Pattern konusu mu? kendi mimarimi yazmak için hangi konuları araştırmalıyım yardımcı olabilirseniz sevirim iyi çalışmalar.

    • Gençay dedi ki:

      Merhaba;

      Katmanlı mimari; bir projenin, hiyerarşik bir şekilde daha rahat yönetilebilmesi ve geliştirilebilmesi için belli başlı prensipler çerçevesinde, temelde standartlaştırılmış bölümler/katmanlar/parçalar eşliğinde geliştirilmesidir. Katmanlı mimarinin dünyaca kabul görmüş standart yapılanması; “DAL”, “BL” ve “PL” dediğimiz üç temel işlevsel sorumluluk yüklenen katmanlara sahiptir. Bu üçlü altyapı üzerine istediğiniz katmanı ekleyebilir, kendinize has geliştirmelerde bulunabilirsiniz.

      Siz kendinize ait hususi bir mimariden bahsemektesiniz. Burada öncelikle çok katmanlı mimarinin hazır bir mimari olduğu yanılgısına düşmemek gerekmektedir. Nihayetinde bu mimariyi ihtiyaca dönük bir şekilde inşa eden yine sizsiniz. Ha tabi yapılan işlemler bir yerden sonra hemen hemen çoğu noktada tekrar etmeye başlayabilir. Nihayetinde bu durum gayet doğaldır çünkü aklın yolu birdir. Örneğin Design Pattern dediğimiz yapılanmalarda belli senaryolarda belli işlemlerin tekrar etmesi neticesinde kavramsallaştırılmış stratejilerden ibarettirler. Hangi mimari olursa olsun, benzer senaryolarda Çin’de ki bir yazılımcıyla Vietnam’da ki bir yazılımcı, birbirleriyle istişare etmeseler dahi ilgili senaryoya birebir aynı çözümü uygulayabilmekte ve bu benzer olan her durumda tekrar tekrar dünyanın farklı noktalarında ceyran etmekte ve yine birbirlerine danışmaksızın benzer nitelikte çözümler üretilmektedir. İşte… Vurgulamaya çalıştığım gibi… Aklın yolu birdir…

      Şimdi sorunuzun cevabına gelirsek eğer; kendi mimarinizi geliştirmek için öğrenmeniz gereken konuların başında Tasarım Prensipleri(Design Principles) ve Tasarım Desenleri(Design Patterns) gelmektedir. Prensipli kod yazmaya ne kadar aşinaysanız ve ne kadar çok farklı senaryoda uygulanabilecek tasarım stratejilerine hakimseniz bir o kadar özgün, sağlam ve yönetilebilir sistemler/mimariler üretebilirsiniz. Burada tekrar ifade ediyorum ki, kendi mimarilerinizde standart stratejileri kullanmanız ilgili mimarinin size ait olmadığı anlamına gelmediğini düşünmeyiniz.

      Sevgilerimle…

      • Gençay dedi ki:

        Ayriyetten bir mimari geliştiricisinde olmazsa olmaz diyebileceğimiz esas yetenekler; ileri seviyede OOP bilgisidir. Siz kullandığınız dilin syntax’ına ve kuramsal olarak oturtulduğu felsefeye ne kadar hakimseniz o kadar sağlam inşalarda bulunabilrsiniz.

        Özet olarak;
        Tasarım prensipleri,
        Tasarım desenleri,
        OOP
        ile harika mimariler geliştirebilirsiniz.

        Sevgiler.

        • Taha dedi ki:

          Süpersiniz Gençay Bey cevap için teşekkürler. Pekii referans olarak verebileceğiniz bir site veyahut eğitim video’su ya da doküman var mı? varsa paylaşabilir misiniz? işin aslı nereden başlayacağımı bilmiyorum. o yüzden sormak istedim. araştırmam gereken konular sırasıyla Design Principles ve Design Pattern mı? internette çok kaynakta bulamadım. o yüzden sormak istedim. iyi çalışmalar dilerim.

          • Gençay dedi ki:

            Öncelikle prensipleri ardından o prensipler çerçevesinde desenleri öğrenmeniz doğru olacaktır. Referans edebileceğim direkt bir kaynak bulunmamaktadır. İlgili konuları derli toplu bulabileceğiniz kitaplar mevcuttur. Onlara göz atabilirsiniz.

            Kolay gelsin.
            Sevgiler.

  8. Yunus Emre dedi ki:

    Merhaba Gencay Bey, verdiğiniz bilgiler için teşekkür ederim. Biz ekip olarak yeni bir oyun projesine başlıyoruz bu projedeki amacımız ekibin etkili bir biçimde iletişim kurması ve birinin yazdığı kodu diğer bir kişinin anlaması bunun için oop ve solid presipleri üzerinde duruyoruz. N katmalı mimariyi daha önce bir web projesinde kullandık ve gayet iyi bir sonuç aldık takip edilebilirlik ve anlaşılabilirlik açısından çok faydalı oldu.

    Unity içinde örnekler aradık ama böyle bir mimariye raslayamadık. Bu konuda öneriniz var mı?

    Teşekkürler. Saygılarımla,

  1. 30 Ekim 2019

    […] içeriğimizde çok katmanlı mimari yapılanmasının kullanıldığı Asp.NET Core 3.0 uygulamalarında migration işlemlerinin nasıl […]

  2. 04 Mart 2021

    […] olan Onion Architecture üzerine istişare eyliyor olacağız. Onion Architecture, klasik bilinen 3 veya n katmanlı mimari yapılanmasındaki karşılaşılan zorlukları ve kaygıları ele alarak bunlara çözüm […]

  3. 13 Eylül 2023

    […] Architecture, klasik bilinen 3 veya n katmanlı mimari yapılanmasındaki karşılaşılan zorlukları ve kaygıları ele alarak bunlara çözüm […]

Bir yanıt yazın

E-posta adresiniz yayınlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir