C#nedir?com
 
YAZAR HAKKINDA
Önsel Akın
Önsel Akın
http://nslkn.com
İletişme geçmek için tıklayın.
8 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: ASP.NET MVC DDD Domain Driven Design Fluent NHibernate MVC 2 NHibernate NUnit S#arp Sharp Architecture SharpArch ASP.NET Önsel Akın
 
YAZI HAKKINDA
Türü : Makale
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 : Orta
Kategori : ASP.NET
Yayınlanma Tarihi : 28.8.2010
Okunma Sayısı : 50520
Yorum Sayısı : 2     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Ş
XML - Deniz Kılınç
emre TAŞ
yazının devamı >
emre TAŞ
Decompiling and Reverse Engineering .Net Radyo
emre TAŞ
yazının devamı >
emre TAŞ
Masaüstü mü ? İnternet Mi? .Net Radyo
emre TAŞ
yazının devamı >
emre TAŞ
.Net Kavramları - .Net Radyo
emre TAŞ
yazının devamı >
emre TAŞ
Yeni Başlayanlar için - .Net Radyo
emre TAŞ
yazının devamı >
Makale Gönder Bende Yazmak İstiyorum
.net TV RSSBlogroll
Turhal Temizer 'in Blogu
How to Best Market Your Messenger Bot 19.8.2017
Turhal Temizer 'in Blogu
Advanced Natural Language Processing Tools for Bot Makers – LUIS, Wit.ai, Api.ai and others 19.8.2017
Burak Selim Şenyurt
Python - Flask ile Basit Bir Web Uygulaması Geliştirmek 19.8.2017
Burak Selim Şenyurt
GoLang - Redis ile Anlaşmak 19.8.2017
  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
Sharp Architecture
 
Kapat
Sayfayı Yazdır Sık Kullanılanlara Ekle Arkadaşıma Gönder MySpace Del.Ico.Us Digg Facebook Google Mixx Reddit StumbleUpon

Asp.Net Mvc ile yeni bir projeye başlarken genelde aşağı yukarı aynı mimari yapıyı oluşturuyoruz. Domain nesnelerini ve iş mantığını barındıran bir sınıf kütüphanesi, domain nesneleri ile veritabanı arasındaki köprü olan veri katmanı sınıf kütüphanesi (Repository sınıfları vb.), web içeriklerini bulunduran Asp.Net Mvc uygulaması, Controller sınıfları için ayrı bir sınıf kütüphanesi projesi gibi. Tüm bu projeler arasında bağımlılığı ortadan kaldırmak için Dependency Injection, kodların tutarlılığını kontrol altında tutabilmek için de birim testi projeleri de çözüme eklediğimiz projeler arasında. Gereksinimlere göre proje sayısı daha da artabilir :) Konumuz proje sayısı değil tabi ki, bahsettiğim mimari yapıyı hazır olarak sunan ve birkaç projede bize hız kazandıran başarılı bir framework konumuz...

Kendini Asp.Net Mvc ve NHibernate özelliklerini maksimum seviyede kullanan sağlam bir altyapı sunarak bakımı kolay, test edilebilir uygulamalar geliştirmeyi sağlayan bir çatı olarak tanımlıyor Sharp Architecture (SharpArch). Domain driven design ve test edilebilirlik bu altyapının odağında bulunuyor. Birazdan da adım adım anlatacağım gibi, SharpArch proje şablonları ile birçok altyapı hizmeti projeyi oluşturduğunuz anda yapılandırılmış olarak kullanımınıza hazır. Verdiğim birçok eğitim ve danışmanlık projesinde, genelde Asp.Net Webforms ile uygulama geliştirmeye alışmış - 'aspx oluştur, butonu sürükle bırak, çift tıkla event handler gelsin, veritabanına bağlan ve bilgiyi çekip DataGrid'e bağla'cılardan bahsediyorum :) - kişilerin ilk tepkisi 'Böyle bir yapıya ne gerek var?' şeklinde oluyor. Benim cevabım ise her zaman, 'Webforms'taki yapıya ne gerek var?' şeklinde. Webforms'un size kazandırdığı hızı, proje karmaşıklaştıkça ve gereksinimler değişip / gelişip projede bazı köklü değişikliklere ihtiyaç duyulduğunda tamamen yitirebilirsiniz, ki genelde böyle oluyor. Mvc ile ise çok uzun yıllardır kullanılan (Java tarafında uzun yıllardır, ancak .Net'te pek de uzun değil, bkz. Castle Project) bir altyapı ile derli toplu ve her aşamasında test edilebilir bir projeye sahip oluyorsunuz. Konudan saptım, SharpArch'a geri dönüyorum :)

Sharp Architecture Kurulumu ve Proje Oluşturma

http://github.com/codai/Sharp-Architecture/downloads adresinden SharpArchApplicationTemplate_1_6_VS2010.zip dosyasını indirin. Adından da anlaşılabileceği gibi Visual Studio 2010 ve MVC 2 üzerine kurulmuş olan en güncel versiyon şu anda bu. NHibernate 2.1.2.4, Fluent NHibernate 1.1 ve güncel Castle Dependency Injection bileşenlerini bulunduran versiyon. Burada sözü geçen Castle bileşenleri az önce yukarıda bağlantısını paylaştığım projedeki bileşenler aslında, ancak SharpArch Castle bileşenlerinden sadece Windsor'u dependency injection için kullanıyor. Ayrıca kurulum için http://www.codeplex.com/t4toolbox adresinden domain nesnelerinin ve bazı görünümlerin otomatik oluşturulmasını sağlayan T4 şablon araçlarını da indirmeniz gerekiyor. Eğer T4 şablonlarını Visual Studio içinde renklendirilmiş olarak görmek isterseniz, http://www.t4editor.net/downloads.html adresinden gerekli olan bileşeni ücretsiz olarak çekebilirsiniz. Eğer T4 şablonları ile vakit geçirecekseniz mutlaka tavsiye ediyorum, Visual Studio'nun renkli IDE'sine alışmış gözlerimiz için T4 şablonları biraz fazla renksiz. Son olarak birim testlerini çalıştırabilmek ve sonuçlarını izleyebilmek için http://www.nunit.org/?p=download adresinden NUnit'i indirmelisiniz. SharpArch test araçları için NUnit kullanıyor, açıkçası NUnit MSTest'e göre biraz daha fazla özellik barındırıyor ancak testler için IDE'yi terketmek istemeyenlere yönelik olarak SharpArch testlerinin MSTest'e uyumlu hale getirilmesine dair ayrı bir yazı yazacağım.

Kurulum için hazırız. Aşağıdaki adımları da tamamladığınızda SharpArch ile ilk projenizi oluşturabileceksiniz.

  • En başta indirdiğiniz ZIP içindeki SharpArchApplicationTemplate_VS2010.zip adlı dosyayı C:\Documents and Settings\KULLANICI_ADINIZ\My Documents\Visual Studio 2010\Templates\ProjectTemplates\Visual C#\Web\ klasörüne kopyalayın. Web klasörü muhtemelen bulunmayacak, klasörü siz oluşturabilirsiniz. Dosyayı ZIP şeklinde kopyalayın, ZIP'i açmamanız gerekiyor.
  • Yine ilk ZIP içinden çıkan SharpArchApplicationWizard.dll dosyasını, C:\Program Files (x86)\Microsoft Visual Studio 9.0\Common7\IDE klasörüne kopyalayın. İşletim sisteminiz 32bit ise Program Files (x86) yerine Program Files\ klasörünü kullanmanız gerekiyor.

Proje oluşturmaya hazırız artık. Visual Studio 2010'u başlatın. Eğer yukarıdaki adımları doğru olarak tamamladıysanız yeni proje oluşturma arayüzünüz aşağıdaki gibi olacaktır.

image

Projenizi isimlendirin ve Create Directory for solution kutucuğunu işaretsiz bırakın. Eğer seçilmiş olarak bırakırsanız Proje_Adı\Proje_Adı\Projeler şeklinde fazladan bir klasör daha oluşturmuş oluyorsunuz. OK ile projenizi oluşturma işlemini başlatıyorsunuz. Şablonların oluşması kısa bir zaman alabilir, bekleyin.

Çözüm Yapısı

Çözüm oluşturulduktan sonra çözüm ağacınız şu şekilde olmalı.

image

  • Code Generation altındaki projeler otomatik kod üretimi için gerekli olan T4 şablonlarını barındırıyor. İleriki postalarda bunları inceleyeceğiz.
  • ApplicationServices projesi altında Controller üstü yapıları bulundurabilirsiniz. Controller'ları koordine eden bileşenler şeklinde de düşünebilirsiniz bunları. İş mantığını çalıştıran ve iş kuralları dahilinde Action akışlarını düzenleyen bileşenleri burada barındırıyoruz.
  • Core, DDD dahilinde projenin temelini oluşturan domain nesnelerini ve bunları kullanmak için gerekli olan arayüz tanımlarını bulunduruyor. Birazdan bir örneğini göstereceğim.
  • Data projesi Core nesnelerini kullanarak veri kaynakları bağlantılarımızı düzenliyor. Daha açıkçası projede veritabanı teknolojisi bağımlı olan bölüm burası. Farklı veritabanı sistemleri için farklı Data projeleri olması gerekiyor. Bunları ise Dependency Injection kullanarak Controller projesine enjekte ediyoruz.
  • Tests projesi için açıklamaya gerek var mı? :)
  • Web projesi Mvc uygulamasının kendisi, zaten proje dosyalarını incelediğinizde fark edeceksiniz. CSS, JS dosyaları, imajlar, View klasörleri ve View dosyaları bu projede bulunuyor. Standart bir Asp.Net Mvc uygulamasından tek farkı Controller sınıflarının bu proje içinden alınmış ve farklı bir projeye (Proje_Adı.Web.Controllers) taşınmış olması. Nedenlerini ve bu yöntemin sağladığı faydaları ileride anlatacağım.
  • Web.Controllers, bkz üst madde.

İlk postayı çok uzatmak istemiyorum ancak çok ufak bir örnek göstermeden bırakmak da istemiyorum. NHibernate ve veritabanı entegrasyonunu nasıl sağlayacağınızı gösterip postamı sonlandıracağım.

Projeyi çalışır hale getirmek

Core projesi altındaki Class1.cs dosyasının adını Feed.cs olarak değiştirelim. Visual Studio sınıf adını da değiştirmek isteyip istemediğimizi soracak, Evet diyelim.

Feed sınıfına birkaç özellik ekleyin, ben aşağıdaki özellikleri ekledim, ayrıca Feed sınıfını Entity sınıfından türettiğime dikkat edin, SharpArch içerisinde tanımlanmış hafif ama entegrasyonu kolaylaştıran bir sınıf bu:

using System;
using SharpArch.Core.DomainModel;

namespace Feeder.Core
{
  public class Feed : Entity
  {
    public virtual DateTime DatePublished { get; set; }
    public virtual string Title { get; set; }
    public virtual string Summary { get; set; }
    public virtual string Category { get; set; }
  }
}

SQL Server üzerinde projeden ulaşabileceğiniz bir veritabanı oluşturun. Veritabanını standart şekilde oluşturabilirsiniz, ekstra hiçbir özellik (Collation vs) belirlemenize gerek yok.

Web projesi altındaki NHibernate.config dosyasını açın ve <property name="connection.connection_string"> elemanı içerisinde bulunan SQL bağlantı ifadesini kendi veritabanınıza göre değiştirin.

Tests projesi altında Proje_Adı\Data\NhibernateMaps\MappingIntegrationTests.cs dosyasında bulunan

new SchemaExport(configuration).Execute(true, false, false, session.Connection, stringWriter);

satırını

new SchemaExport(configuration).Execute(true, true, false, session.Connection, stringWriter);

olarak değiştirin. Bu yaptığımız değişiklikle, testleri çalıştırdığımızda NHibernate'in üretilen script'leri veritabanı üzerinde çalıştırmasını, dolayısıyla Core içinde tanımladığımız nesnelere karşılık gelen tabloların veritabanında belli eşleşme (mapping) kuralları dahilinde oluşturulmasını sağlamış oluyoruz. Bu kuralların nasıl ve ne şekilde belirlendiğine daha sonra geleceğim. Meraklı olanlar Fluent NHibernate konusunu inceleyebilirler.

Rebuild.

NUnit'i başlatıp Proje_Adı.Tests.dll adındaki DLL dosyasını Open Project seçeneği ile açabilirsiniz. Dosya açılıp DLL içindeki tüm testler ağaç formatında görüntülendiğinde herhangi bir dala tıklayarak Show CheckBoxes seçeneğini işaretleyin.

image

CanConfirmDatabaseMatchesMapping haricinde tüm testleri seçin. Sadece ana kategorileri tıklayarak da yapabilirsiniz bunu.

image

Run ile seçtiğiniz tüm testleri çalıştırın. Yeşilleri görmeniz gerek :) Eğer göremediyseniz yukarıdaki adımlarda bir hata olmuştur diyebilirim.

Peki ne başardık? Veritabanı ile entegre olmuş, birim testleri, dependency injection'ı, tüm altyapısı hazır bir proje iskeleti elde etmiş olduk. SQL Management Studio ile veritabanının durumuna bakabilirsiniz. Aşağıda bakılmışı mevcut:

image

Sharp Architecture çatısını incelemeye devam edeceğiz.

Görüşmek üzere!

Makale:
Sharp Architecture ASP.NET Önsel Akın
  • Yazılan Yorumlar
  • Yorum Yaz
MAR
18
2011
Makale güzel fakat çok yüzeysel olmuş,bölüm bölüm ve daha detaylı olursa daha güzel olabilir.
ARA
1
2010
Bence önemli bir uygulama. ben de çalıştı.
Sayfalar : 1 
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