Bu site emekli olmuştur. Arşiv amaçlı olarak BT AKADEMİ sponsorluğunda yayın hayatına devam etmektedir.
Ana Sayfa .net TV Makaleler Kaynak Kod Haberler Serbest Köşe Canlı Köşe Forum C#nedir? Ekibimiz RSS
ASP.NET
C# / VC#/.NET
Genel
YAZAR HAKKINDA
Ö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ı : 63466
Yorum Sayısı : 18 yorum yaz
SİTE İÇİ ARAMA
Ü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.
C#nedir? hesabınız yok mu?
Üye olabilmek için tıklayın.
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.
Silindi
emre TAŞ
yazının devamı >
silindi
emre TAŞ
yazının devamı >
silindi
emre TAŞ
yazının devamı >
silindi
emre TAŞ
yazının devamı >
silindi
emre TAŞ
yazının devamı >
Bende Yazmak İstiyorum
Blogroll
Turhal Temizer
Conda install environment.yml Package 28.11.2021
Turhal Temizer
Mac OS/X Removing CUDA 28.11.2021
Burak Selim Şenyurt
Monolitik Uygulamalarda Teknik Borçlanma ile Mücadele (Teori) 28.11.2021
Burak Selim Şenyurt
Effective Engine — Bir Uzay Macerası 28.11.2021
Diğer Herşey
» Makaleler RSS
» Video Gönder
» Makale Gönder
» Serbest Köşeye Yazı Gönder
» Yazar Başvurusu
» C#nedir? Ekibinde Olmalıyım!
Sponsorlar
Ana Sayfa / Makaleler / Önsel Akın / ASP.NET / Sharp Architecture
Sharp Architecture
Favorilerime Ekle
Gönderiliyor lütfen bekleyin...
arkadaşıma gönder
Arkadaşınızın email adresi:
Mesajınız:
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.
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ı.
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.
CanConfirmDatabaseMatchesMapping haricinde tüm testleri seçin. Sadece ana kategorileri tıklayarak da yapabilirsiniz bunu.
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: