March 2006 Entries etiketi ile ilgili girdiler...
Bir Firefox eklentisi olan Deepest Sender'ı deniyorum. Bakalım Türkçe karakterler ile arası nasıl.

üğişçöı

ÜĞİŞÇÖI

w.Bloggar'da olmayan çoklu kategoride yazı ekleme var bunda. Ayrıca Türkçe karakter kullanılmış kategori isimleride normal gözüküyor. Editörüde neredeyse WYSIWYG.

Bugün itibarı ile Visual Studio 6.0 ile ilgili tüm yazılımları sistemimden kaldırmış bulunuyorum. Geçmişte oldukça iyi işler yaptık kendisi ile. İlk çıktığı günü ve hatta "Technology Preview" sürümünü bile hatırlıyorum. İlk yazdığım ActiveX ve DCOM programcıkları geliyor aklıma. Kaldırırken biraz hüzünlendim aslında. Fakat VS2005'i açınca bu hüzünden eser kalmadı. Wink. Şimdiye kadar yazdığım VB6 uygulamalarını 7z ile zipledim ve 170mb civarında bir dosya oldu.

Visual Studio 2005 Express sürümlerine ücretsiz sahip olmak istiyorsanız 7 Kasım 2006'dan önce indirip kurmanızı tavsiye ederim. Bu tarihten sonra ücretli olacak. Visual Web Developer Express ile biraz oynadım ve göründüğü kadarı ile programlama açısından bir kısıtlama yok. Ayrıca bu programa kayıt olduktan sonra 244 sayfalık bir pdf kitap, çeşitli grafikler ve bazı programlama bileşenlerini ücretsiz indirebiliyorsunuz. SQL Server 2005 Express sürümünüde ücretsiz indirmek mümkün.

Ayrıca şu anda www.madeinexpresscontest.com adresinde bu araçlar ile yapılacak projelerin yarışması var. Önce projenizin ne olduğunu açıklayan bir kaç paragraflık bir yazı yazıyorsunuz. Eğer finale kalırsa projeyi yapmaya başlıyorsunuz. Sanırım bu ürünlerin bu şekilde erişilebilir olması Açık Kaynak alanında da yeni projelerin ortaya çıkmasına sebep olacak.

Yeni Subtext altyapımız ile blogumda gezinmek ve istenen makalelere ulaşmak daha da kolaylaştı. Öncelikle IE ile çalışmayan arama özelliğini tamir ettim. Problem GO tuşunun "default" tuş olarak tanımlanamamasından kaynaklanıyordu.

Popüler yazıların ve yorumların gösterildiği iki yeni modül ile hangi yazılar daha çok okunmuş görmek mümkün. Ayrıca tek tek makaleleri görüntülerseniz; en altta konu ile ilgili diğer makalelere ulaşabileceğiniz linkler listeleniyor. Ayrıca aynı sayfada bir önceki ve bir sonraki makalelere ulaşmak içinde linkler göreceksiniz. Site temasını yeni baştan yazıp IE ve FireFox ile daha da uyumlu hale getirdim ve menüyü sağa aldım. Nedense blog uygulamalarında menüler hep sağda yer alıyor. Bir temeli var mı diye araştırdım fakat bir sonuç alamadım. Aslında soldaki menü bana daha normal geliyor. Neyse madem böyle bir gelenek var bende sağ tarafa aldım menüyü.

Daha önce veritabanında temizlik yaparken yazıların bağlı olduğu kategorileri silmiştim. Onları da düzelttim. Artık kategorilerden de istenen yazılara ulaşmak mümkün.

JFO's blogundan

Kod içinde hata ayıklarken breakpoint oluşturup trace sırasında değerleri kontrol ederizya. VS2005 ile gelen tracepoint'ler ile olay biraz daha ilerlemiş.

Breakpoint oluşturduktan sonra üzerine sağ tıklayıp "When hit..." seçeneğine tıklarsanız breakpoint tracepoint haline geliyor ve çalışma sırasında çıktılar output ekranına atılıyor. Güzel bir olay, artık 0.2km daha hızlı kod yazabiliriz.

Bu yıl yazılım dünyasındaki sekizinci senem (Commodore 64 ve Amiga dönemlerini saymıyorum). Zaman içinde yazılım dillerinin daha da somutlaşması (Design Patterns, Best Practices, OO ve UML vb) bana dizayn ve mimari konularına daha fazla eğilmem için zemin hazırladı. 10 sene önce evrenkentte yazdığım kodlara şöyle  bir bakınca "ben öğretmen olsam buna not vermem" diyorum. Şimdi yazılım araçlarının daha da gelişmesi, ve bu araçlara erişimin kolaylaşması, açık kaynak yazılımların çoğalması, dizayn, mimari, güvenlik, yönetim, nesne yönelimli gibi konular hakkında materyalin daha fazla bulunabilmesi 10 sene önce hayal bile edilemeyecek bir durumdu.

Bu kadar çok kaynak serbest olarak erişilebilir olduğu için performansı düşük, anlaşılması zor, bakımı ve değiştirmesi imkansız kod yazmak günah olmalı bence. Peki nasıl mükemmelliğe ulaşacağız? Yazdığımız kodu nasıl daha anlaşılır biçimde üreteceğiz? Dökümantasyonu nasıl daha okunur hale getireceğiz? Nasıl daha fazla öğrenip uygulayacağız? İşte bu yazımda sizlere birkaç püf noktası vererek iş kalitenizi arttıracak konulardan bahsetmek istiyorum.

Yazılım geliştirme olayını bir bütün olarak ele aldığımızda kod yazmanın çok küçük bir parçayı temsil ettiğini görüyoruz. Hataların en fazla yapıldığı ve müşteri isteklerinin programa dönüştürüldüğü geçiş süreci olduğu için de yanlış anlaşılmalara ve uygulamalara en açık bölüm. Hal böyle olunca buna bir de yazılımcının yetersiz deneyimini ve yönetimin ilgisizliğini katarsak ortaya kalitenin çok düşük olacağı bir ürün çıkacaktır. Yazılım uzmanı kullandığı programlama dilini çok iyi biliyor olabilir. Yazılımı yapılan işi de bilmek en az programlamayı bilmek kadar önemlidir. Örneğin muhasebe kurallarını bilmeden nasıl muhasebe programı yazacağız? Yada diğer sistemlerin girdi çıktılarını öğrenmeden nasıl entegre bir sistem yazacağız?

Çoğu zaman program geliştirmek; favori text editörümüzü açıp bir kaç satır kod yazmak, veritabanına iki üç tablo yerleştirmek ile başlar. Bu bazı firmalarda dahi böyle. Bu tür bir projeye devam ettiğinizi düşünelim eminim 5 ay sonra ilk yazılan kodun tek satırı dahi kalmaz. Diğer bir konuda yazılan kodun müşteri istekleri ile örtüşmesi. Örneğin yazdığınız bir fonksiyonun hangi müşteri isteği tarafından kullanıldığını biliyor musunuz?

Kitap Okuyun

Kullandığınız yazılım dili ile ilgili en az bir referans kitap bulundurmalısınız. Araştırıp en iyisini veya tavsiye edilenleri alın. Dil ile ilgili kitapların yanında insan ilişkilerini anlatan kitaplar, proje yönetimini anlatan kitaplar, süreç iyileştirme ile ilgili kitaplar, IEEE, CMMI yada ISO standart kitapları, UML ve nesne yönelimli dizayn konularını anlatan kitaplar, kullandığınız yazılım araçlarını anlatan kitaplar, güvenli kod yazmak ile ilgili kitaplar sayılabilir. Burada kitap reklamı yapmayacağım, eğer ilgileniyorsanız benimle bağlatıya geçip bilgi alabilirsiniz.

Bu kitaplardan öğreneceğiniz yöntemler yazdığınız kodun kalitesini oldukça arttıracaktır.

Listelere Üye Olun

E-posta listeleri bedava destek alabileceğiniz yerlerden bir tanesi. Çoğunlukla üretici firmalar tarafından da kontrol edilmekte. Bir listeye üye olduğunuzda muhakkak liste kurallarını öğrenin. Örneğin nasıl üye olacağınızı veya üyelikten çıkacağınız iyi bilin. Benim takıldığım listelere her gün bir kaç kişi direk listeye gönderdiği UNSUBSCRIBE e-postası ile hem kendini rezil ediyor hemde üyelikten çıkamıyor. Listede her zaman saygılı olun ve şakayı yeri gelince kullanın. Şaka yaptığınızı belirtmek içinde :-) imleçlerini kullanın ki herkes şaka yaptığınızı anlasın, aksi takdirde sonu gelmez tartışmalara girersiniz. Konu dışı bir şey soracaksanız liste kurallarına göre postayı işaretleyin. Örneğin benim üye olduğum bir listede OT harflerini konu kısmında görünce konu dışı olduğunu anlıyorum. Liste üyeleri e-maıl programlarında bu başlıklara göre kurallar oluşturabiliyor.

Sorduğunuz sorular cevaplanınca teşekkür edin ve daha sonra bir özet postası atıp problemi nasıl çözdüğünüzü anlatın ki herkes yararlanabilsin. Listedeki insanlarla fırsat doğarsa tanışmaya çalışın. Listeye sormadan evvel Google'da arayın.Yüzde 95 ihtimalle sizin karşılaştığınız problem birileri tarafından zaten çözülmüştür.

Açık Kaynak Araçları Kullanmayı Öğrenin

Eskiden kod yazarken Allah ne verdiyse harala gürele yazıyorduk. Ne bir dökümantasyon ne bir ünite testi nede kurulum için herhangi bir şey yapıyorduk. Programı edinen kişilerin en az bizim kadar bildiğini varsayarak, kurulum sırasında problem yaşamayacaklarını düşünürdük. Şimdi o günler geride kaldı. Artık kod yazarken gerekli açıklama satırlarını XML olarak yazıyoruz. Daha sonra açık kaynak programlar ile bunları yardım dosyalarına dönüştürmek mümkün. Ünite testleri içinde bir sürü açık kaynak sistem var. Programı yazmadan önce testini yazıyoruz artık. Sonrada bu testlerden geçmek için kod yazıyoruz. Sonuçta ortaya çıkan ürün en azından bazı testleri yapılmış olarak çıkıyor. Kodun ne kadarının ünite testine girdiğini anlayacak araçlar da var. Testleri yapılmamış kısımları hemen görmek mümkün. Ayrıca bu işleri tamamen otomatize edip sonuçları her derleme işleminde görmekte mümkün. Belli kurallara uyulup uyulmadığını kontrol edecek araçlar da mevcut. Örneğin herkes member değişkenler için m kullanmış mı? Bu araçların bugün mevcut olması bizim için bulunmaz bir fırsat. Belli bir programlama diline yönelik yazmadığım için araç isimlerini vermiyorum fakat .NET ile ilgili araç isimlerini isterseniz benimle bağlantıya geçiniz.

Sürüm ve Konfigürasyon Yönetimi Konusunda Bilgilenin

Bir ekip içinde yazılım geliştirmenin sorumluluğu, diğer kişilerin ne yaptığını bilmekten geçer. İşlerin paylaştırılması, planların yapılması ve çalışmaya başlamak için kendi payınıza düşen kod parçasını alıp değiştirmek, ünite testlerini yapmak ve en sonunda da diğer kişilerin kullanımına açmak gerekir. Kullandığınız kod kontrol programının özelliklerini öğrenmek bir yana, proje içinde kullanılan konfigürasyon yönetimi metodunu öğrenmek te çok önemlidir. Yapılan her işin, üretilen her dökümanın kısacası zaman içinde değişime uğrayacağını bildiğiniz her türlü materyal kod kontrol sunucularında tutulmalıdır. Yazdığınız kodun eski sürümüne dönmek yada farklı sürümlerde paralel geliştirme yapmak ancak bu şekilde mümkün olabilir.

Bir Bilene Sorun

İşte herkesin korktuğu bir olay. Genelde kişiler suçlanmaktan yada küçük düşmekten korktuğu için soru sormaz. Ama soru sormadan da öğrenme olmuyor. Yazdığınız bir kodun daha iyi nasıl yazılabileceğini sordunuz mu hiç? Yada bir problemi en iyi hangi yolla çözebileceğinizi öğrenmek için soru sordunuz mu? Eğer korkularınız varsa yukarıda anlattığım e-posta listeleri sizin için biçilmiş kaftan. Kendi isminizi kullanmadan soru sorabilirsiniz. Yada patronunuzun ismine GMail'de bir hesap açıp onu kullanın Smile evet bu bir şaka...

Soru soracağınız kişileride iyi belirlemeniz lazım. En azından yeterli bilgiye sahip olup olmadıklarını anlamaya çalışın. Aldığınız bilgiyi vakit geçirmeden uygulayın ve sonuçları tekrar bir bilenle tartışın.

Seminerlere Katılın

Yeni ürünleri görmek, yeni insanlarla tanışmak, yaptığınız iş hakkında daha da fazla bilgilenmek ve sıfatınızın daha da fazla tanınması için en mükemmel yol. Peki yazdığınız kodun kalitesini nasıl arttıracak? Ben genelde hands-on denilen oturup kod yazdığımız seminerleri tercih ediyorum. Hem uygulama var hem öğrenme. Bu arada da kodu nasıl yazmışlar görme imkanımız oluyor. Eğer birinin daha iyi bir fikri varsa çıkıp söylüyor.

Ürün tanıtım seminerleri de yararlı eğer kod yazmada kullandığınız araçlar ile ilgiliyse yada üretkenliği arttıracak araçlar anlatılıyorsa. Bu araçlara erişiminiz olmayabilir fakat en azından böyle bir teknolojinin varlığından haberdarsınız.

Yeni İnsanlarla Tanışın

İnsan ilişkilerine yukarıdaki paragraflarda değindim. Yeni insanlarla tanışmak önünüze yeni ufuklar açabilir. Bu kişilerden öğreneceğiniz hiç bilmediğiniz hiç görmediğiniz yada pek önemsemediğiniz konular problemlerinize farklı bir bakış açısı katabilir. Yada siz onlara bir şeyler katabilirsiniz. Yeni insanlarla tanışmak benim hayatımda her zaman değişikliklere yol açmıştır. Ayrıca iş konuları dışında birlikte yapılacak aktiviteler çok değişik iş imkanları açabilir.

Blog Yazın/Okuyun

Deminden beri yaptığım olay... Eğer benim blogumu okuyorsanız ne mutlu bana. Bir iki yorum da atarsanız çok mutlu olurum. Şaka bir yana öğrendiğim konuları ders notları gibi başkalarına anlatmak amaçlı yazdığımda daha da pekiştiriyorum. Hatta bazen farklı yollar bile bulmak mümkün oluyor. Ek olarak iş verenler blogunuzu okuyup ne işler yaptığınızı öğrenebilir ve buna göre size teklifte bulunabilirler. Blogunuzda belli konulara yönelin ve iş hayatınızda karşılaştığınız konuları yazın. Tanıdıklarımın bir kaç blogu birden var, bir tanesi kesinlikle işleri ile ilgili konuları yazmak için diğeri ise sırf geyik olsun diye yazdıkları yada aile fertleri ile resim paylaşmak için kullandıkları blogları.

Kod yazarken çeşitli problemlerin çözümünü genelde bloglarda buluyorum. Bir kaç yazışmadan sonra kodu alıp kullanabiliyorum. Kimi zaman örnek projeler bile indirmek mümkün. Böylece yazdığım kodun kalitesi artmış oluyor.

Refactoring Nedir Öğrenin

Refactoring yazılan kodun performansının, bakımının, okunabilirliğinin ve yeniden kullanılabilirliğinin arttırılması için uygulanan bir dizi metoddan ibarettir.Örneğin tekrar eden rutinleri ayrı fonksiyonlara ayırmak, ilgili rutinleri bir sınıf altında toplamak, değişken isimlerini değiştirmek, algoritmaları daha hızlı çalışır hale getirmek vb gibi. Tüm bunları yaparkende zaten çalışan kodu bozmamak. Sonuçta işin kalitesi artmış oluyor.

İnsan İlişkilerini Sıcak Tutun

Firma içinde olsun, bağlı olduğunuz sektörde olsun; tanıştığınız insanlar ile ilişkilerinizi sıcak tutmaya çalışın. Bir gün bir probleminiz olduğunda gene onlara soracaksınız ama sadece probleminiz olduğunda bu kişilerle bağlantı kurarsanız biraz ayıp olur. Ayrıca soru sormayıda öğrenmek gerek. Örneğin benim blogumda bir kaç tane yorum var, sadece hata aldığı kısmı kopyalayıp yapıştırmış. Ne bir açıklayıcı not var nede takip ettiği adımları anlatmış. Neyse bende çıkarttım kristal küremi baktım neymiş hatası. Geriye mesaj atıp 3 vakte kadar çözeceksin dedim :-).

Değişime ve Yenilenmeye Açık Olun

Değişik metodları ve yeni ürünleri kurmaktan, kullanmaktan çekinmeyin. Değişmeyen ve yenilenmeyen beyinler bir gün gelir sistem dışı kalırlar. Değişiklik ve yenilik her zaman iyi olmayabilir ama bunun muhakemesini yapacak olan sizlersiniz.Benim en çok karşılaştığım tipler "gündüz programcıları". Bunlar sadece yazılım sektörü iyi maaş ödüyor diye sektöre atılmış kişilerdir. Bir iki kurstan sonra hayata atılıp kendilerini işin ehli gibiymiş gösterip ahkam keserler. Bu kişiler kullandıkları yöntemleri değiştirmek istemezler çünkü öğrenmek ve uygulamak beraberinde yeni külfetler getirecektir. Zaten bildikleri yoldan şaşmayıp işlerini zamanında bitirmeye çalışırlar. Mükemmele ulaşmak gibi bir çabaları yoktur. Refactoring deyince küfür zannederler :-)

Birde "gece programcıları" vardır. Burada anlattıklarımı yüzde 70 yapan kişiler sanırım bu kategoriye giriyorlar. Gece programcısı araştırıp öğrenmek, yenilikleri denemek için sonsuz bir istek içindedir. Mükemmelliğe ulaşana kadar her yolu dener. Sistemleri değiştirmekten kaçınmaz.

Sektörün her iki tip insana da ihtiyacı var. Biri iyidir, diğeri kötüdür diye bir yorum yapmayalım. Projelerde bazen zamanlama ön plandadır, kimi zamanda kalite. Duruma göre bu iki tip yazılım uzmanının dengeli bir karışımı kaliteli bir ürünü zamanında teslim etmenize sebep olabilir.

Firma Kültürünü Öğrenin

Firma içindeki işleyiş şemasını iyi öğrenin. Firma kurallarını iyi öğrenin. Bazı kurallar yazılı olmayabilir ve zamanla öğrenilecek kurallardır. Yazılım standartlarını, kullanılan araçları, ve ağ yapısını öğrenin. Yazdığınız kodun standartlara uyduğundan emin olun.

Kişisel Bilgisayarınıza Yazılım Araçlarını Kurun

Yazılım olayına gönül vermiş iseniz zaten bunu söylemeye gerek yok. Ama ben öyle insanlar ile çalıştım ki adam sadece firma duvarları arasında yazılım uzmanı olarak geçiyor. Evinde bir bilgisayarı dahi yok, varsa bile örütbağı amaçlı kullanıyor. Bir kişisel e-posta adresi yok. Seminerlerden, toplantılardan, etkinliklerden bi haber. Ben bu işi yapmaktan zevk alıyorsam tabii ki evimdeki bilgisayarıma gerekli araçları yüklerim. Evde de bazı projeler geliştirmek isterim. Amaç daha çok denemek, daha çok yanılmak ve bilgiyi arttırmak değil mi?

Açık Kaynak Projelere Katılın

Açık kaynak projeler size bir ekip içinde nasıl çalışacağınızı ve ne tür araçları kullanacağınız hakkında bilgi verir. Katılacağınız bir projeyi eminim Sourceforge yada başka açık kaynak proje sitelerinde bulabilirsiniz. Sonuçta yazdığınız kod başkaları tarafından kontrol edileceği için değişiklikleri takip edip en iyi nasıl yazılır öğrenebilirsiniz.

Hayal Kurun

Hayal kurmak beynimizin en üretken işlerinden biridir. Hayal kurarken problemlere yeni çözümler bulabilir veya yeni projelere başlamak için malzeme toplayabilirsiniz. Ben bir defter alıp buna aklıma gelen olası projeleri yazıyorum. Gerçi ben projeleri hayata geçirene kadar birileri benden önce yapıyor ama olsun. Bu yöntemin amacı aslında yeni projeler bulmak değil var olan projelerin belirli kısımlarının nasıl düzeltilebileceğini araştırmaktır. Örneğin bir projede şöyle bir durumla karşı karşıya kaldık. Bir dökümanın onaylanması için 3 ayrı kişinin onay vermesi gerekiyordu. 5 yıl önce programı dizayn edenler veritabanında ki Dokuman tablosunda bu 3 kişi için birer saha tanımlamış. Gel zaman git zaman, onaylama süreçleri organizasyonun yapısı ile değişmiş fakat yeni sistemi karşılayacak veritabanında yeteri kadar saha yok. Olayın çözümü basit. Ek bir tablo yaratıp onaylayacak kişileri burada tutabilir ve her döküman için istendiği kadar çok onaylayacak kişi tanımlanabilir.

Kod Teftişi

Kod teftişi başkasının yazdığı kodun gözden geçirilmesi ve aksaklıkların not edilmesidir. Proje açık kaynak ise, kodu düzeltmek te işin içine girer. Eğer firma içinde yazılım geliştiriyorsanız, kodun yazarına bir not gönderip değişmesi gereken yerleri ve nedenlerini bildirebilirsiniz. Kod teftişinin amacı var olan kodu daha iyi çalışır hale getirmek yada proje standartlarına uydurmaktır. Agile metodları ile geliştirme yapanlar Pair Programming olayını bilirler. Bu yöntemde iki kişi bilgisayarın karşısına geçer. Birisi kod yazarken diğeride yazılan koda puan verir. 10'dan başlayan bu puanlamada her hata da 1 puan düşülür. Kodlama bitince programın aldığı puana bakılır ve 10 puan almak için neler yapılabilir tartışılır. Gerekli olan düzeltmeler uygulanır.

Orjinal yazar Tatham Oddie... Bu yazıyı Tatham'ın verdiği bir sunumdan izniyle çevirdim.

Giriş

Inversion of Control (IoC) bir modülün bağımlılık, çözülme, konfigürasyon ve hayat döngüsü konularına çözüm sağlayan dizayn kuralıdır. IoC’nin en önemli özelliği bir modülün bağımlı olduğu diğer assembly bileşenlerinin çözülümünde yatmaktadır.

IoC’nin en iyi bilinen olayı Dependency Injection Principle’dır (DIP). Diğer bir adıda Hollywood kuralı’dır (Bizi arama, biz sana haber veririz). Bu kural bir dizayn paterni değildir.

Genel olarak modüllerin gevşek olarak birbirine bağlanmasını sağlar. Gevşek bağlılığın sağladığı yararları sıralarsak:

  1. Yeniden kullanılabilirliğin arttırılması
  2. Test işlemlerinin kolaylaştırılması
  3. Bir araya getirmesi ve konfigürasyonu kolay sistemler (Modül bazında)

Dependency Resolution

Basitçe özetlersek, IoC kuralına göre dizayn edilmiş bir modül (Modül A), işlerini tamamlamak için kullandığı diğer modülleri (Modül B, Modül C, Modül D) yada assembly’leri çağırmaz. Bunun yerine bağımlı olduğu modülleri (Modül B, Modül C, Modül D) tanımlar ve bir container nesnesi bu tanımlanan modülleri kullanıma sunar. Yani çağırılan modüllerin kontrolü ters yüz edilir. Modül A çağırdığı modüllerin (Modül B, Modül C, Modül D) kontrolünü yapmaz, bu işlem artık container nesnesinin işidir.

Çağırılan modüller 3 şekilde tanımlanabilir.

Constructor Injection – çağırılan modül sınıfın “constructor” fonksiyonunda “property” olarak tanımlanır ve sınıf nesne olarak oluşturulduğunda container tarafından doldurulur.

public class SimpleMovieFinder : IMovieFinder

{

private IMovieDatabase database;

public SimpleMovieFinder(IMovieDatabase database)

{

this.database = database;

}

public string[] GetByTheatre(long theatreId)

{

string filter = string.Format("[TheatreId] = {0}", theatreId);

return database.GetByFilter(filter);

}

}

Setter Injection – bağımlı modüller “public property” olarak tanımlanır (get - set) ve “container” sınıfın nesne olarak oluşturulduğu sırada bu “public property”leri set eder.

public class SimpleMovieFinder : IMovieFinder

{

private IMovieDatabase database;

public SimpleMovieFinder()

{

}

public IMovieDatabase Database

{

get { return database; }

set { database = value; }

}

public string[] GetByTheatre(long theatreId)

{

string filter = string.Format("[TheatreId] = {0}", theatreId);

return database.GetByFilter(filter);

}

}

Contextualized Dependency – sınıf bir “service manager” sınıfından miras alır ve çağırılan diğer modüller bu servis yönetici sınıfı tarafından doldurulur.

public class SimpleMovieFinder : IMovieFinder, IServicable

{

private IMovieDatabase database;

public SimpleMovieFinder()

{

}

public void Service(ServiceManager manager)

{

database = (IMovieDatabase)manager.Lookup("MovieDatabase");

}

public string[] GetByTheatre(long theatreId)

{

string filter = string.Format("[TheatreId] = {0}", theatreId);

return database.GetByFilter(filter);

}

}

Dependency Injection kullanılan sınıfın yapısını bozmaz. Bu, modülleri herhangi bir container nesnesi olmadan da kullanabileceğimiz anlamına geliyor. İyi dizayn edilmiş modülleri IoC kuralına göre kullanmak için her hangi bir değişiklik yapmamıza da gerek yoktur. Üçüncü parti modülleri bile IoC uygulamaları içinde kullanabiliriz.

Diğer taraftan yukarıda anlatılan “Contextualized Dependency Lookup” metodu sınıfın yapısını bozar. Tipik olarak bu, modüllerin bir container içinde kullanılmasını ve uygun bir framework’ten ithal edilmesini gerektirir. Ayrıca IoC yaklaşımında kullanılacaksa ekstra iş gerektirir. Hal böyle olunca CDL çok az kullanım alanı bulmaktadır.

Konfigürasyon

IoC framework, “dependency resolution” prensipleri ile aynı prensipleri kullanarak konfigürasyon servisleride sunar. Örneğin SmtpEmailSender isimli bir sınıfın aşağıdaki gibi bir constructor sunduğunu düşünelim. IoC framework otomatik olarak bu konfigürasyon detaylarını doldurur ve bizim bu iş için ayrıca kod yazmamıza gerek kalmaz. Bunu bir XML konfigürasyon dosyası kullanarak yapar.

public SmtpEmailSender(string serverHostname, int serverPort)

Eğer hazır sınıfları IoC framework içine dahil ediyorsak “Setter Injection” metodunu kullanarak konfigürasyon parametrelerini doldurabiliriz.

Yaşam Süreci

Bir modülün yaşam süreci, oluşturulmasından sonra hangi aşamalardan geçeceğini tayin etmektir. Diyelim ki modülümüz bir kaç “thread” açıyor ve bir “socket” üzerinden dinleme yapıyor. Bu genelde constructor seviyesinden olacak bir iş. IoC framework için kullanılacak modüllerin bir start/stop arayüzü vardır ve “container” bu arayüz ile modüllerin yaşam sürecini kontrol edebilir.

Daha karmaşık yaşam süreçleri için bazı IoC framework’lerinde daha detaylı yönetim biçimleri vardır.

Neden DIP Kullanalım?

Tabii ki iki tane sınıf için IoC sisteminin uygulanması zaman harcamaktan başka bir şey olmaz. IoC sisteminin yararı karmaşık bağımlılık bulunduran uygulamalarda ortaya çıkar. Yandaki şemaya bir göz atalım. Bu şemada yeşiller sınıfları sarılarda arayüzleri temsil eder. Sınıflardan her hangi birini kullanmaya kalktığınızda ortaya çıkacak kod karmaşasını tahmin edebiliyor musunuz?

Uygulama terimi içinde, DIP çok basit bir teknik. Tek başına tüm nesneleri yaratıp parametreleri oluşturan bir uygulamadan ziyade, DIP ile bir dizi gevşek bağlı modül olarak geliştirme yapmak çok daha karlı. Ayrıca bu modüllerin birbirleri ile nasıl ilişki kuracaklarını bilmelerine gerek yok. Çüknü tüm modüller bir container nesnesi içinde çalışıyorlar ve container nesnesi kofigürasyon dosyasından (XML formatında bir dosya) gerekli tüm parametreleri ve birlikte çalışma prensiplerini alıyor.

http://blogs.pragprog.com/cgi-bin/pragdave.cgi/Tech/TransparentIOC.rdoc

Mevcut IoC Sistemleri

IoC kavramı henüz .NET dünyasında tam olarak gerçeklenebilmiş değil. Bunun sonucu olarak ortaya çıkan IoC framework’leri Java dünyasında olduğu kadar zengin değil. Aşağıda iki IoC sisteminin kısa açıklamalarını bulacaksınız.

Spring.NET (http://www.springframework.net/)

Java Spring Framework’ünden adapte edilmiştir. (http://www.springframework.com/)

Bazen başka bir sistemden adapte etmek iyi bir yöntem olmuyor ve sonuçta aynı fonksiyonellik sunulabilmesi için pek çok takla atmak gerekiyor. Bu da sistemin performansını etkiliyor

Java içindeki IoC kavramı daha iyi oturduğu için Spring.NET aynısını yapmaya çalışıyor. Kavram olarak iyi sayılabilir.

Kullanılan diğer modüllerin otomatik olarak bağlanması yok.

XML konfigürasyon dosyaları çok karmaşık ve bazen kodunuda yazmak gerekiyor.

Konfigürasyon dosyalarının kod ile olan senkronizasyonu kolayca bozulabiliyor.

<object id="smtpEmailSender" class="BulkEmailSender.Logic.SmtpEmailSender, BulkEmailSender.Logic">

<constructor-arg><value>mail.ssw.com.au</value></constructor-arg>

<constructor-arg><value>25</value></constructor-arg>

</object>

Castle Framework (http://www.castleframework.net/)

Kullanılan diğer modüllerin otomatik olarak bağlanması var.

Anlaşılabilir konfigürasyon dosyaları.

<component id="smtpEmailSender">

<parameters>

<serverHostname>mail.ssw.com.au</serverHostname>

<serverPort>25</serverPort>

</parameters>

</component>

Dökümantasyon yok denecek kadar az ve varolan dökümantasyon değişiklik olduğunda güncellenmiyor.

IoC’nin uygulanması

Container Oluşturmak

IoC tüm nesnelerimizi yönetmek için bir “container” nesnesini kullanıyor. Container nesnesinin sorumluluğu kullanılan diğer nesnelerin istendiği zaman hazır edilmesidir.
Container nesnesinin işini yapabilmesi için kullanılacak nesnelerin container nesnesine eklenmesi ve sundukları servislerin tanımlanması gerekir. Nesnelere daha sonra erişebilmek ve konfigürasyon dosyaları ile bağlamak içinde tekil bir anahtar verilir.

Container nesnesini yaratmak kolay:

IWindsorContainer container = new WindsorContainer();

Ve kullanılacak nesneleri de eklemek çok zor değil. Ayrıca nesneye verdiğimiz tekil anahtara dikkat edin. Daha sonra konfigürasyon dosyalarına bağlamak için işimize yarayacak. Birde arayüz referansına dikkat edin IBulkEmailSender ile nesnenin sunduğu servislere erişim sağlanıyor.

container.AddComponent("newsletterBulkEmailSender",

typeof(IBulkEmailSender),

typeof(NewsletterBulkEmailSender));

İhtiyacımız olduğunda kullanacağımız fonksiyonun tipine bağlı olarak herhangi bir nesneyi çağırabiliriz. Tabii ki bunu arayüzü kullanarak yapacağız. Bir satırda arayüzün ismini 3 kere kullanıyoruz ama genede tüm sınıfları birbirine kodla bağlamaktan daha az kod yazıyoruz.

IBulkEmailSender sender = (IBulkEmailSender)container[typeof(IBulkEmailSender)];

Ünite testlerini VS IDE ile entegre eden TestDriven.NET yeni sürümünde NCover Explorer ile beraber geliyor. Bu sürümü indirip kurmanız şiddetle tavsiye olunur.

Taner epeyden beri DNN4.0'ı kurmak için uğraşıyordu. Tabii ki dil uyumsuzluklarından dolayı bir sürü hata ile karşılaştı. Sanırım burada tek önemli olan konu SQL Server kurulumu sırasında "Collation" seçimini "SQL_Latin1_General_CP1_CI_AS" olarak seçmek. Eğer başka bir şey seçerseniz DNN4.0 kurulumunda çalışması gereken SQL yordamları tam olarak çalışmayacaktır ve ya veritabanı eksik kurulacaktır yada tümden kurulmayacaktır. Daha önce 3.2 sürümünün nasıl kurulacağını anlatmıştım. Şimdi ise DNN4.0'ı Windows 2003 Server - IIS üzerine SQL Server 2005 ile nasıl kuracağınızı anlatacağım. Biliyorsunuz DNN4.0 sürümü .NET2.0 ile çalışacak biçimde derlenmiştir.

Figür 1: SQL Server "Collation" seçeneği

Öncelikle source kodu indirip bir dizine açın.

ÖNEMLİ

Zipli dosyanın açıldığı dizine bakarsanız bir "library", birde "website" isimli iki dizinde projelerin toplandığını göreceksiniz. Ana dizindeki "DotNetNuke.sln" dosyasını Notepad ile açıp "http://localhost/DotNetNuke_2/" yazan satırı bulun. Nedendir bilmiyorum ama bu dizin bana yanlış geldi. Sanki sondaki "_2" kısmı orada olmayacak. Eğer diğer referanslara bakarsanız ana web sitesinin adresinin http://localhost/DotNetNuke olması gerektiğini görürsünüz. Sonundaki "_2" kısmını silin ve kaydedin.

Bu aşamadan sonra "website" dizinini IIS içinde "DotNetNuke" isimli bir "virtual directory" olarak tanıtmamız gerekiyor. Sitenin özelliklerinden ASP2.0 ile çalışması gerektiğini belirtmemiz gerekiyor. Ayrıca "Application Pool" olarak "ASP.NET v2.0" seçmeniz yada bu yoksa ASP.NET 2.0 için ayrılmış bir pool seçmeniz gerekiyor.

Figür 2: Application Pool için ASP.NET v2.0 seçeneği

 

Figür 3: ASP.NET sürümü önemli

Şimdi kullanacağımız config dosyasına karar vermemiz gerekiyor."website" dizini içinde iki adet config dosyası mevcut. Bunlar "release.config" ve "development.confıg". Durumunuza göre birini seçip ismini "web.config" olarak değiştirin.

SQL Server'da Security-Logins kısmına giderek "ASPNET" ve "Network Services" kullanıcılarını "sysadmin" olarak ekleyin. Böylece hem bağlantı ayarlarında "Trusted Connection" özelliğini kullanacağız hemde bu iki kullanıcıya tablo veya stored procudure yaratma yetkisi vermiş olacağız. Geliştirme amaçlı kullandığımız için bu kullanıcılara bu hakları vermenin sorun olmadığını sanıyorum.

Figür 4: Bu kullanıcılar gerekli

Bu iki kullanıcıyı ekledikten sonra "DotNetNuke" isminde boş bir veritabanı yaratın. Bu veritabanı kuruluma geçtiğiniz zaman DNN tarafından doldurulacaktır.

ASP.NET 2.0 ile birlikte "web.config" dosyasını IIS içinden yönetebilme özelliği geldi. Yukarıdaki resimde "Edit Configuration" butonuna tıkladığımızda aşağıdaki gibi bir ekran ile karşılaşıyoruz. Burada SQL Server bağlantı ayarlarını girmemiz gerekiyor. Fakat bunları girmeden önce SQL Server üzerinde yukarıda anlattığım değişiklikleri yapmanız gerekiyor.

Benim kullanıdığım bağlantı yordamı:

Server=GURKAN\SQLEXPRESS;Database=DotNetNuke;Trusted_Connection=True

Kullandığınız SQL Server'a göre isimleri değiştirmeniz gerekebilir.

Figür 5: Config dosyasında XML ile boğuşmak istemeyenler için

Yapmamız gereken son iş ise "website" dizinine gene yukarıda kullandığımız iki kullanıcı için "Full Control" vermek. Windows Explorer kullanarak bu dizine "ASPNET" ve "Network Services" kullanıcıları için tam yetki verin.

Buraya kadar her şey normal gitti ise http://localhost/DotNetNuke adresine gidip kurulumu başlatın. DNN sıra ile her şeyi kurup en sonda size tıklamanız gereken bir link verecektir. O linkten aşağıdaki gibi bir portal sayfasına ulaşmanız gerekiyor.

Figür 6: Bunun üstüne bir çay içilir (sigara kullanmadığım için)

Artık Visual Studio 2005 kullanarak da projeyi açabilirsiniz.

Figür 7: Bunu nasıl C#'a çevirebiliriz acabaTounge

DNN ile gelen temaları beğenmediyseniz www.dnnskins.com adresinden bedava temalara bakabilirsiniz.

Arama



Hakkımda

Merhaba, ben Gürkan Yeniçeri. 10 yılı aşkın süredir özel sektör ve hükümet iştiraklerinde yazılım mühendisliği yapıyorum. Bu sitede 2005 Mart ayından beri genelde yazılım mühendisliği ve hobilerim hakkında yazmaktayım. Profesyonel iş geçmişim hakkında daha fazla bilgiyi aşağıdaki Linkedin.com linkinden alabilirsiniz.
Gürkan Yeniçeri'nin profilini görmek için tıklayın

Kontak

Soru sormak veya öneride bulunmak isterseniz buradaki kontak formunu kullanın. Mesajlarınıza en kısa zaman içinde cevap vermeye çalışacağım. Ayrıca Windows Live Messenger kullanarak gyeniceri {AT} hotmail {DOT} com adresinden bana ulaşabilirsiniz.

Eğer İngilizce blogumu okumak isterseniz buraya buyrun.
Blogumu RSS Bandit gibi bir RSS okuyucusu ile de takip etmek için kullanın.
Ayrıca aşağıdaki linklerden hakkımda ayrıtılı bilgi alabilirsiniz.
Twitter
Friendfeed
Facebook

RSS 2.0

Reklamlar


Vezir

Vezir Proje Danışmanı
Sitede birde Vezir isminde wikimiz var. Bu wikiyi yazmayı düşündüğüm bir kitap için oluşturmuştum daha sonra herkese açmaya karar verdim. Vezir yazılım firması kurmak isteyenlere tavsiyeler vermek için hazırlandı. Ayrıca UML ve Modül Tabanlı Geliştirme hakkında da bilgiler mevcut. Vakit buldukça yeni eklemeler yapıyorum. Değişikliklerden haberdar olmak için RSS çıktısına üye olabilirsiniz.

Tag Bulutu

Tüm taglar...
www.flickr.com
This is a Flickr badge showing public photos from gurkanyeniceri. Make your own badge here.
Bu blogda 265 yazı ve 509 yorum var. Diğer sitelerden 26 adet link gelmiş.

Reklamlar