Bu site emekli olmuştur. Arşiv amaçlı olarak BT AKADEMİ sponsorluğunda yayın hayatına devam etmektedir.




C#nedir?com
 
YAZAR HAKKINDA
Koray Kırdinli
Koray Kırdinli
http://koraykirdinli.wordpress.com
İletişme geçmek için tıklayın.
10 Makalesi yayınlanmakta.
Yazar hakkında detaylı bilgi için tıklayın.
Yayınlanan diğer makaleleri için tıklayın.
İlgili etiketler: business layer controller data layer katmanlı mimari n-tier object oriented presentation layer security service layer UI validation Tasarım Koray Kırdinli
 
YAZI HAKKINDA
Türü : Serbest Köşe (?)
Serbest Köşede C#nedir?com üyelerinin hazırladıkları yazılar yayınlanır. Bu yazılar editör incelemesine girmeden yayınlanır.
Seviyesi : Başlangıç
Kategori : Tasarım
Yayınlanma Tarihi : 1.3.2010
Okunma Sayısı : 30227
Yorum Sayısı : 0     yorum yaz
Site İçi AramaSİTE İÇİ ARAMA
Üye Girişini AçÜye GİRİŞİ
Üye girişi için tıklayın.
Kullanıcı Adı
Şifre
 
Beni her zaman hatırla
Bir hafta boyunca kullanıcı bilgilerinizi kullanıcı çıkışı yapana kadar hatırlar. (Paylaşılan bilgisayarlarda önerilmez.)
 
Şifremi / Kullanıcı Adımı unuttum.
 
.net TV RSS Serbest KÖŞE (?)
Serbest Köşede C#nedir?com üyelerinin hazırladıkları yazılar yayınlanır. Bu yazılar editör incelemesine girmeden yayınlanır.
emre TAŞ
Silindi
emre TAŞ
yazının devamı >
emre TAŞ
silindi
emre TAŞ
yazının devamı >
emre TAŞ
silindi
emre TAŞ
yazının devamı >
emre TAŞ
silindi
emre TAŞ
yazının devamı >
emre TAŞ
silindi
emre TAŞ
yazının devamı >
Makale Gönder Bende Yazmak İstiyorum
.net TV RSSBlogroll
Turhal Temizer
Conda install environment.yml Package 21.11.2024
Turhal Temizer
Mac OS/X Removing CUDA 21.11.2024
Burak Selim Şenyurt
Rust ile ECS Yaklaşımını Anlamak 21.11.2024
Burak Selim Şenyurt
Birlikte Rust Öğrenelim Serisi 21.11.2024
  Diğer Herşey
Sponsorlar
BT Akademi
Medya Portakal
Video Hosting Sponsoru
Csharpnedir.com bir Ineta üyesidir
Uzman Abi
Her Yönüyle C# - Sefer Algan
Katmanlı Mimariye Giriş
 
Kapat
Sayfayı Yazdır Sık Kullanılanlara Ekle Arkadaşıma Gönder MySpace Del.Ico.Us Digg Facebook Google Mixx Reddit StumbleUpon

Bu makalemizde katmanlı mimariye kısa bir giriş yapacağız.
Birçok uygulamada iki katmanlı ve bol datasetli bir yapı görmekteyiz. Bu formumuz veya sayfamızdaki gridleri doldurmak için oldukça kullanışlı bir yöntem.
Genellikle uygulamalar bu tarzda ve iki katmanlı yazılıyor. Ancak büyük projeler için bu bahsettiğimiz yöntem yerini 2 den daha fazla katmanın yer aldığı
veri erişim (Data Layer) , iş (Business Layer) ve sunum (Presentation Layer) olmak üzere temelde 3 katmandan oluşuyor ve datasetlerimizin yerini sınıflar alıyor.
Dataset kullanmak işi basite indirir ancak ihtiyaçlar arttıkça aynı kodu tekrar tekrar yazmak programcıyı sıkacaktır. Çünkü düşünün ki bir kontrolü çok yerde kullanıyorsanız projenizde defalarca onu doldurmak hem zaman , hem de iş gücü kaybı olacaktır.
Genel olarak nesne yönelimli programlar 3 veya daha fazla katmandan oluşur demiştik. Burada data,iş ve sunum katmanın dışında ekstra katmanlar da yer alabiliyor. Bileşenler için bir katman , harici DLL ler için bir katman , Exe'ler için bir katman. Bütün katmanlar fiziksel olarak aynı makine üzerinde çalışabileceği gibi farklı makinelere de dağıtmak mümkün.
Uygulamayı katmanlara ayırırken anahtar noktamız değişebileceğini tahmin ettiğiniz kodları birbirinden ayırmak olmalıdır ilk etapta.Böylece mevcut kodu değiştirmeden geliştirme yapmaya olanak sağlamış oluruz.Ayrıca tekrarlanan kod daha fazla hataya sebep olur.

Olası katmanların neler olabileceğine bir bakalım.

Database : Tablo,view,stored prosedürler ve triggerlar diyebiliriz.
Data Access Tier : Veritabanına erişim sağlayan , bağlantıları yöneten kodların bulunduğu katmandır.
ORM : SQL den nesneye veya nesne den SQL e çevirme işlemi yapar , genellikle code generation ile yapılır.
Business Domain Objects : Genellikle property'ler bulunur ve ilişkisel bir mantıkta tasarlanır.
Service Layer : İş akışını yönetir.
Controller Logic : User Interface ile alakalı olmayan mantıksal yapıyı User Interface den ayırmaya sağlar. Bu ayırma işlemini MVC framework te de görebiliyoruz.
UI/View : Kullanıcını etkileşim içinde olduğu katmandır

Aşağıdaki bazı nesnelerin ve kodların hangi katmanda bulunması gerektiğine dair bir tablo var.

Örnek Nerede Bulunmalı
SQL Server, Oracle, MS Access Database, DBMS
stored procedure Eğer mantıksal ise Business Domain Object, değilse Database
ASP page UI ve Controller
ASPX page UI
ASPX page code-behind Controller
Response.Redirect Controller
Windows Form UI
Windows Form code-behind Controller
Address class Business domain object
conn=new OleDBConnection;
conn.Open;
Data Access Tier
myAddress.Street = Reader.GetString(3)

veya

cmd.AddParameter(myAddress.Street)
O/R Mapping
using (DBConn conn = ConnFactory.Create())
{
   conn.Save(address);
   client.AddressId = address.Id;
   conn.Save(client);
}
Business Domain
Yukarıdaki listede ilginç olan ASPX sayfaları UI ve Controller'ın birleşiminden oluşuyor.
Diğer ilginç bir nokta ise stored prosedür mantıksal bir işlem yapıyorsa bu onun Business Logic te olduğunu bize gösteriyor.

Şimdi katmanlı mimarilerde olması gereken olmazsa olmaz bazı noktalara değinelim.

1. Validasyon
Çok katmanlı yapılarda validasyon yapan kodların tekrarlanmaması çok önemlidir. Kullanıcı butona bastığında , controller nesneleri veya service katmanı veriye ihtiyaç duyduğunda , veritabanına kayıt girileceği zaman vs. bir çok yerde validasyona ihtiyaç duyarız. Validasyon yapmadığımız veya validasyon kodunu tekrarladığımızda yanlış veri elde etme şansımız artar.Validasyonu 3 farklı şekilde yapabiliriz:
 - Validasyon için ayrı bir bileşen geliştirmeli , hem windows hem de web formları aynı bileşeni kullanarak validasyon işlemini gerçekleştirebilmelidirler.
 - Validasyon Business nesnelerine veya controller a koyulmalı ve herhangi bir programcının kodu yazarken bu validasyonları bypass etmesi engellenmelidir.
 - Validasyonu veritabanı veya UI 'ye koymak.
hangi yöntemi kullanırsanız kullanın sıfır kod tekrarına erişmek pek te kolay değildir.

2. Güvenlik Problemleri (Security)
 - Menüleri veya butonları kullanıya göre enable disable etmek.
 - Business layerde kullanıcı bazlı sınırlama koymak örneğin sadece kendi girdiği verileri güncellemesi gibi.
 - Veritabanına kısıtlar (constraints) koymak veya prosedür de yetkiyi kontrol ettirmek

3. MVC kullanmak
MVC contoller mantığı ile UI i ayırmak için oldukça etkili bir yöntemdir.Genellikle karmaşık ve iş akışı odaklı yapılarda kullanılır.

4. Transactions
Bir işlem yarım kaldığında onun geri alınması olayı (rollback).Bu genellikle Controller veya Service Layer da bulunur.

5. Yeniden Kullanımı Sağlamak (Re-use)
Şirket bazında sık kullanılan kontrollerin birer bileşen haline getirilip tekrardan kullanımı sağlanmalıdır. Örneğin çalışmakta olduğum şirkette müşteri bilgileri gerekli olduğunda tekrardan veritabanına erişen kodu yazıp bununla vakit kaybetmiyorum , hazır olan bileşeni ekleyip , iş mantığına konsantre olabiliyorum.

Microsoft'un open-source olarak piyasaya sürmüş olduğu Application Blok gibi bir framework kullanmak hem standartlaşmayı sağlar hem de asıl odaklanmamız gereken konulara daha fazla vakit ayırmamızı sağlar.Ancak sadece SQL odaklı olduğu için kimi zaman ihtiyaçlara cevap veremeyebilir.

Bence en güzeli kendi frameworkümüzü yazmak. Tabiki zor ancak ihtiyaçlarımıza en iyi cevabı verecek kod  da kendi yazdığımız koddur.
Umarım yararlı olmuştur.Herkese iyi çalışmalar.
 
 

 

Makale:
Katmanlı Mimariye Giriş Tasarım Koray Kırdinli
  • Yazılan Yorumlar
  • Yorum Yaz
Bu konu hakkında yayınlanan yorum bulunmamaktadır.
"Yorum Yaz" tabını kullanarak sizde yorumlarınızı yazabilirsiniz.
Yorum yazabilmek için üye girişi yapmalısınız. Üye girişi için tıklayın.
Üye değilseniz Üyel Ol linkine tıklayarak üyeliğinizi hemen başlatabilirisniz.
 
  • Bu Konuda Son 10
  • Eklenen Son 10
  • Bu Konuda Geçmiş 10
Bu Konuda Yazılmış Yazılmış 10 Makale Yükleniyor
Son Eklenen 10 Makale Yükleniyor
Bu Konuda Yazılmış Geçmiş Makaleler Yükleniyor