Layer (Katman) Diyagramları
Visual Studio 2010 Architecture Tools ile gelen diyagramların sonuncusu Layer
(Katman) Diyagramlarıdır.
Yazılım ile belli bir süreden fazla uğraşan herkes katmanlı mimarileri
duymuştur, özellikle üç katmanlı mimari son derece popülerdir. Mimarisel anlamda
katmanlar, bir arada uygulamanın sağlıklı bir şekilde çalışmasını sağlayan;
ancak birbirinden görev (genelde göreve göre ayrılırlar) bakımdan ayrılarak
özelleşen yapılardır. En bilinen katmanlar, UI (User Interface - Kullanıcı
Arayüzü), Business Layer (İş Katmanı), DAL (Data Acess Layer - Veri Erişim
Katmanı). Bu katmanlar isimlerinden de anlaşıldığı işler için özelleşmiş
durumdalar ve aralarında belli bir ilişki bulunuyor. Örneğin kullanıcı arayüzü
katmanının amacı sadece kullanıcıya bilgileri göstermek ve kullanıcıdan gelen
bilgileri diğer katmanlara iletmek ya da iş katmanının amacı veri erişim
katmanından aldığı verileri işleyip kullanıcıya göstermek için kullanıcı arayüzü
katmanına iletmek veya tam tersi bir işlemi yürütmek. Bu tür katmanların
oluşmasının temel bir sebebi vardır, her bir katman kendine ait görevi
yürütürken, aralarında kurulan ilişkinin dışına çıkmaz. Örneğin kullanıcı
arayüzü katmanı kesinlikle, doğrudan veritabanına ulaşmaz; çünkü bu iş veri
erişim katmanının görevidir.
Katmanlı mimari basitçe yukarıda anlatılan gibidir; ama çok daha detaylıdır.
Bu konuda Cenk Çağlar'ın
Katmanlı Mimari Nedir? yazısına veya
Wikipedia'daki
Multitier Architecture maddesine bakabilirsiniz.
Katman diyagramları da Visual Studio 2010 ile geliştirdiğiniz uygulamaların
katmanlarını tasarlamanızı ve en önemlisi oluşturduğunuz mimarinin doğru şekilde
uygulandığını kontrol etmekte kullanılır.
Katman Diyagramları Oluşturmak
Katman diyagramlarını tam manası ile kullanabilmek için kod projeleriniz ile
aynı solution içinde bulunan bir Modelling Project içinde bulunmalıdır.Önceki
yazılarımızda tasarladığımız HERA IK sistemi örneğinden devam edecek olursak,
artık tasarımlarımızı koda dönüştürmek için HERA isimli bir solution
oluşturuyoruz. Daha sonra bu Visual Studio'nun Architecture menüsünde bulunan
New Diagram'a tıklayınız. Açılan ekrandan Layer Diagram'ı seçiniz ve bir isim
veriniz.

İsim verdikten sonra "OK" düğmesine basarak devam ediniz. Yeni bir proje
oluşturma penceresi açılacak ve sizden Modelling Project için bir isim girmenizi
isteyecek. İsim girip OK düğmesine basınız. Böylece hem katman diyagramınız
oluşacak hem de solution'ınız için bir tane Modelling Project oluşacak.
Katman Diyagramına Katman Tanımlamak

Bir katman diyagramında katmanlar, yukarıdaki ekran görüntüsünden de
görülebileceği üzere mavi dikdörtgenler şeklinde ifade edilir. Bizim
sistemimizde temelde üç tane katman olmasını planladığımız için üç tane mavi
dikdörtgen görülüyor. Henüz bu katmanlar ile herhangi bir kod
ilişkilendirilmediği için bunlar "unlinked" durumundalar.
Katman diyagramına artifact (artifact kelimesi benim bir türlü tam manasıyla
tercüme edemediğim bir kelime. sözlük anlamıyla "insan eliyle yapılmış şey" olsa
da, burada ifade edilen anlamı yazılan kod, sınıf, kütüphane, kontrol vs..)
eklemenin birden fazla yolu vardır.
- Solution Explorer: Solution explorer'dan sürükleyip
katman diyagramına bırakacağınız bir kod veya proje kendine ait bir katman
içerisinde görünür. Ayrıca tıklandğında ilgili koda gidilmesi için
aralarında bağlantı olur.
- Architecture Explorer: Architecture Explorer'da bulunan
elemanlardan namespace gibi katman diyagramına konabilecek nesneleri,
sürükle bırak yöntemi ile katman diyagramına ekleyebilirsiniz.
- Dependency Graphs: Dependency Graphs'te bulunan
elemanlardan da sürükle bırakla katman diyagramına eleman ekleyebilirsiniz.
Katman diyagramına tek tek artifact'lar ekleyebileceğiniz gibi, birden fazla
elemanı da topluca seçip ekleyebilirsiniz. Böyle bir durumda tüm artifact'lar
tek bir katman içerisinde gruplanacaktır.Eğer yine de tüm artifact'ların her
biri için ayrı gruplar oluşması isteniyorsa SHIFT tuşuna
basılması gerekiyor.
Katman diyagramına önceden katmanları çizip, sonradan artifact'ları içine
sürükleyip bırakabilirsiniz. Sürükleyip bıraktığınız zaman artifact ile katman
arasında bir bağlantı oluşur.
Diyagramınızdaki katmanalara, artifact'lar eklediğiniz zaman sağ üst
köşelerinde sayılar göreceksiniz. Bu sayılar o katmana bağlanmış olan
artifactların sayısını gösterir. Örneğin yukarıdaki örnek için hazırladığım
HERA isimli web uygulamasını HERAUI katmanına, HeraBusinnessServices
WCF servisini HeraBusinnessSerives katmanınına ve HeraDAL
kütüphanesini ise HeraDAL katmanına sürükleyip bıraktığım zaman
hepsinde aşağıdaki gibi 1 sayısı görünecektir.

Peki katmanların içine sürükleyip bıraktığımız yani ilişkilendirdiğimiz
artifactları nasıl görebiliriz? Bu özelliği bize Layer Explorer
sağlayacak.
Layer Explorer
Layer Explorer katmanlarla ilişkilendirilmiş olan artifactların
gösterilmesini sağlar. Layer Explorer'ı açmak için herhangi bir katmana sağ
tıklayıp açılan menüden "View Links" seçeneğine tıklayarak Layer Explorer'ı
açabilirsiniz.

Eğer katman diyagramında boş bir yere tıklarsanız yani hiç bir katman seçili
olmazsa, Layer Explorer katman diyagramındaki tüm katmanları ve bu katmanlara
bağlı artifact'ları listeler. Ayrıca Layer Explorer, katmanlarla
ilişkilendirilmiş artifactların düzenlenmesini de sağlar. Yani bir katmandan
artifact silebilir, artifact'ı taşıyabilir ya da bir artifact'ı birden fazla
katmana ekleyebilirsiniz.
Katmanlar Arası Bağımlılıklar
Katman diyagramının amacı tabi ki sadece artifact'ları gruplamak değildir;
temel amaç bu katmanlar arasında bağımlıklar tanımlamak ve bunları kontrol
altında tutmaktır. Burada bağımlıklıktan kasıt, katmanların birbirleri
arasındaki ilişkidir, örneğin kullanıcı arayüzü katmanının iş katmanında bulunan
bir sınıfı kullanması gibi.
Katman diyagramı, katmanlar arasındaki ilişkiyi proje referanslarından
bulabileceği gibi, siz de elle bu ilişkiyi tanımlayabilirsiniz. Normal şartlarda
Solution Explorer'dan artifact eklerken, referansları doğru şekilde tanımlanmış
ise katman diyagramı bağımlılıkları otomatikman oluşturur.
Katmanlar arasında elle ilişki oluşturmak için Toolbox'ta bulunan
Dependency nesnesini kullanabilirsiniz. Dependency nesnesini seçtikten
sonra, öncelikle referansı kullanan katmana sonra da referans edilen katmana
tıklarsanız, iki katman arasında bir bağlantı oluşur. Bu bağlantı tek taraflı
bir ilişki ya da bağımlılıktır.Bu tür ilişkide katmanlardan sadece biri, diğer
katmandaki bir veya daha fazla sınıfı kullanır. Bazı durumlarda her iki katmanda
birbirine bağımlı olabilir. Bu durumu da Bidirectional Dependency
kullanarak tanımlayabilirsiniz.
Katmanlar Arası Bağımlılıkları Doğrulamak
Yazımızın biraz üst tarafında katman diyagramlarının bir amacı da
tanımladığımız bağımlılıkları kontrol altında tutmaktır dedik. Bunun anlamı
bizim tanımladığımız veya otomatik olarak oluşan bağımlılıkların bozulup
bozulmadığını kontrol etmektir.
Yazılım süreci, özellikle kalabalık ve dağıtık ekiplerde, çok dinamik bir
süreçtir. Aynı anda birçok yazılımcı koda müdahele ederler. Bazı durumlarda da
bu müdahaleler sırasında başta tasarlanmış olan mimariyi bozabilecek kodlar
sisteme eklenebilir. Katman diyagramı, sağladığı doğrulama imkanı ile sisteme
eklenen ve mimariye ters düşen bu tür kodların tespit edilmesini ve derlemenin
(build) bozulmasını sağlar. İstenirse bu doğrulama, Team Foundation Server Build
sistemine bağlanarak alınan her build ile çalışması sağlanabilir.
Katman diyagramını doğrulamak için katman diyagramında boş bir yere sağ
tıklayıp "Validate Architecture" komutunu seçin. Komut verildikten sonra Visual
Studio katmanlardaki kodları derleyerek, tanımlanan bağımlılıklara aykırı bir
durum olup olmadığını tespit eder.

Bizim bu örnekte kurduğumuz sistemde web uygulaması, WCF servislerine, WCF
servisleri de sınıf kütüphanesine bağımlı.Bunların tam tersi ise Visual Studio
açısından hata olarak kabul edilecek. Yani WCF servisinden, HeraDAL sınıf
kütüphanesindeki sınıflara ulaşabilirken tam tersi hatalıdır.Bu durumu test
etmek için web uygulamasından doğrudan HeraDAL'daki bir sınıfa ulaşarak
diyagramı doğrulayalım.
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using HeraDAL;
namespace HERA
{
public partial class _Default : System.Web.UI.Page
{
protected void Page_Load(object
sender, EventArgs e)
{
BaseClass baseClass = new BaseClass();
}
}
}
Yukarıdaki kod web uygulamasının ana sayfasını oluşturan default.aspx'e ait
code-behind dosyası. Görüldüğü üzere burada öncelikle HeraDAL namespace'ine
doğrudan ulaşılıyor ve BaseClass isimli sınıfın bir örneği oluşturuluyor. Bu
durum bizim yukarıdaki tasarımımıza aykırı, kodu bu şekilde kaydedip katman
diyagramına sağ tıklayıp "Validate Architecture" komutunu seçtiğimiz zaman
aşağıdaki hatayı görebiliriz.

Visual Studio'nun Error List ekranında aşağıdaki hatalar görünür.
Error 2 AV0001 : Invalid Dependency : HERA(Assembly) -->
HeraDAL(Assembly)
Layers: HERAUI, HeraDAL | Dependencies: References
D:\ALM\HERA\HeraModels\HeraKatmanlar.layerdiagram 0 0 HeraModels
Error 1 AV0001 : Invalid Dependency : HERA._Default.Page_Load(Method) -->
HeraDAL.BaseClass.BaseClass(Method)
Layers: HERAUI, HeraDAL | Dependencies: Calls
D:\ALM\HERA\HeraModels\HeraKatmanlar.layerdiagram 0 0 HeraModels
Hata doğrudan bize HERA uygulamasından HeraDAL uygulamasına geçersiz bir
bağımlılık kurulduğunu gösteriyor. Hataya çift tıkladığımız zaman da doğrudan
hatalı koda ulaşıyoruz.
Gerçek hayatın her noktasında olduğu gibi, yazlımda ve katman diyagramlarının
doğrulanmasında da bir workaround (etrafından dolaşma) yöntemi bulunuyor. Yani
bu durumu biliyor; ancak bu şekilde kalması gerektiğini düşünüyorsanız hatayı
görmezden gelmek istiyorsanız hataya sağ tıklayarak açılan menüden Manage
Validation Errors -> Suppress Errors komutunu seçerseniz Visual Studio artık bu
kodun bir hata olduğunu size bildirmeyecek ve hata listesinde hatayı üstü çizili
olarak gösterecektir. İsterseniz aynı yolu izleyerek ancak bu sefer "Hide
Suppress Errors" komutunu seçerek hataların görünmesini engelleyebilirsiniz.

Suppress Errors dedikten sonra diyagramı tekrar doğruladığınız zaman
aşağıdaki resimde olduğu gibi doğrulamayı geçecektir.

Bir hatayı görmezden gelmek için komut verdiğiniz zaman, Visual Studio bu
hataları .suppressions uzantılı bir dosyada saklar. Herhangi
bir zamanda hataları tekrar açmak için, bu dosyadan ilgili yerleri silebilir ya
da tamamen dosyayı silerek tüm hataları geri getirebilirsiniz.
Katman diyagramınızdaki doğrulamayı yerel makinenizdeki her derleme işlemi
sırasında da yapabilirsiniz. Bunun için izlemeniz gereken iki adım bulunuyor.
- Solution Explorer'dan modelleme projesini açın ve katman diyagramı
seçin. Diyagramın özelliklerini açıp, Build Action
özelliğinin Validate olarak seçildiğine emin olun.
- Solution Explorer'dan modelleme projesinin özelliklerini açın.
Validate Architecture özelliğini True yapın.
Yukarıdaki adımları tamamladıktan sonra solution'ı derlediğiniz zaman
otomatikman doğrulama yapılacak ve başarısız olursa, derleme topluca başarısız
olacaktır.
Katman diyagramının en iyi yanlarından biri daha önce söylediğimiz gibi bu
doğrulama işlemini TFS 2010 Build'ine bağlayabilmektir. Böylece aldığınız
gecelik build'ler veya gated check-in'lerde bu doğrulama çalışacak ve bir hata
olması durumunda build başarısız olacak ve bug kaydı açılacaktır.
Bu yazımızda Visual Studio 2010 Architecture Tools'un en güzel
diyagramlarından biri olan katman diyagramını inceledik. Bu diyagram ile
oluşturduğumuz mimariyi ve katmanları nasıl tasarlayabileceğimizi ve bu
tasarımın ihlal edilmediğini kontrol altında tutabileceğimizi gördük. Bu
diyagramı büyük bir projeye başlarken genel yapıyı çıkarmak için çizebileceğimiz
gibi projenin ilerleyen safhalarında mevcut yapıyı görselleştirmek için de
kullanabilirsiniz.
Bundan sonraki yazımızda Visual Studio 2010 Architecture Tools ile ilgili son
yazımızda Architecture Explorer ve Dependency Graphs konularına bakacağız.
3 kişi tarafından 5.0 olarak değerlendirildi
- Currently 5/5 Stars.
- 1
- 2
- 3
- 4
- 5
Visual Studio
alm, application lifecycle management, architecture tools, layer diagram, katman diyagramları