Visual Studio 2010 Architecture Tools - VI

28. Kasım 2010

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.

  1. 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.
  2. 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 , , , ,



Yorumlar

Yorum ekle


(Gravatar simgesini gösterecek)  

  Country flag

biuquote
  • Yorum
  • Canlı önizleme
Loading