MVP-VM Pattern'i

clock Şubat 23, 2012 12:26 by author Deniz |

Merhaba,

Bir önceki yazımda MVP, MVC ve MVVM ( Presentation Model ) konusuna değinmiştim. Aslında en baştaki amacım ilk gördüğümde benim çok hoşuma giden MVP-VM pattern'i hakkında bir yazı yazmaktı fakat sonrasında Presentation Patternlerin gelişimini ve diğer popüler Presentation Patternleri anlatmanın daha doğru olacağını düşündüm. Hem benim içinde yararlı bir süreç oldu, sanırım makele yazmanın en güzel yanı da yazarken aynı zamanda birçok şeyide öğrenebilmek.

Başlamadan önce bir önceki yazımı okumanızı tavsiye ederim.

Şimdi geçen yazımda Presentation Patternlerin başlıca amaçlarının Separation of Concerns prensibini uygulamak, reusability'i arttırmak ve Test Driven Development'ı desteklemek olduğundan bahsetmiştim. Ayrıca yeni gelen isteklere hızlı cevap veren mimariler oluşturmakta bunların arasında.

MVP-VM yani Model View Presenter - View Model aslında bir çeşit Windows Forms için MVVM. Amaç hem Windows Forms'un binding mekanizmasını efektif kullanmak hem de mümkün olduğu kadar Test edilebilir bir yapı kurmak. Daha önceki yazımda Presentation Model'den ve MVVM'in ondan evrildiğinden bahsetmiştim. PM kısaca hem domain model ile senkronizasyonu sağlıyor hem de UI ile ilgili stateleri tutup güncelliyordu, bence MVP-VM pattern'inin amacı PM'in üzerindeki bu yükü Presenter ve View Model'in üzerine dağıtmak ayrıca reusability'i daha da arttırıp, daha kolay ve efektif test edilebilir kodlar yazılmasını sağlamak. Daha öncede bahsettiğim gibi PM'de View ile Model arasında ki senkronizasyonun nasıl yapılacağı belirtilmemiş, MVP-VM bu senkronizasyon konusunu netleştiriyor aslında. Şu haliyle baktığımız zaman bu pattern'i sadece Windows Form uygulamalarında kullanılabileceğini söylemek haksızlık olur, WPF ve Silverlight'da da rahatlıkla kullanabilirsiniz.

Ozaman başlayalım Smile Fazlası...



MVC, MVP ve MVVM Patternleri

clock Şubat 15, 2012 20:08 by author Deniz |

Merhaba,

Profesyonel anlamda bu işi yapmaya başladığımdan beri gözlemlediğim şeylerden birede, bir proje başlandığında herkesin bir heycanla "Abi ayıralım kodları, 3 katmanlı mimari olsun, Data Access Layer, Business Layer, Presentation Layer koyalım süper olsun" yaklaşımıyla başladığı, bunlardan Data ve Business'ın nispeten iyi kotarıldığı ama iş Prenstation'a geldiğinde kodların çöplüğe döndüğünü gördüm. Genelde Presentation Layer küçümsenen ve "Yaparız hacı, button click değil mi?" tarzında yaklaşımlara maruz kalan bir katman. Aslında kazın ayağı öyle değil, UI'ında kendi ait bir business'ı, iş akışı var, ekrandaki kontrol sayısı arttıkça ve son kullanıcıdan gelen ipe sapa gelmez isteklerin sayısı arttıkça iş iyice karmaşıklaşıyor.

Her ne kadar Türkiye'de ki Developer Camiasında artık bir bilinçlenme başlamış olup, butonun altına kod yardırma geleneği etkisini kaybetip yavaş yavaş, yerini "OOP varmış, bunun presibleri varmış" yaklaşımına bıraksada UI konusu benim gözlemlediğim kadarıyla göz ardı ediliyor. Buton altı konusu açılmışken Oğuz Yağmur'un yıllarca önce yazdığı konuyla ilgili çok güzel bir makale var, buradan okuyabilirsiniz. 

Yinede ben Türkiye'de ki tablonun Oğuz Yağmur'un o yazıyı yazdığı günlerde ki kadar karanlık olduğunu düşünmüyorum. Böyle düşünmemin sebebi de bugün iş ilanlarına baktığım zaman, OOP bilen, Kurumsal Mimarilerde tecrübleri olan gibi özelliklerin artık daha ön plana çıkması. Hatta artık Back-End Developer ve Front-End Developer kavramları bile insanların kafasında netleşmiş olucak ki, artık kimse superman developer aramıyor.

Nesne Yönelimli Programlama (Object-Oriented Programming) prensipleri, inanılanın aksine hayatımızı kolaylaştıran, değişikliklere ve geliştirmelere hızlı ayak uydurmamızı sağlayan prensipler. Bunlardan konumuzla en ilgili olan prenstip Separation of Concerns prensibi. Biraz uzun bir yazı olucak sanırım, yazmak istediğim çok şey var Smile Fazlası...



C# Expression ve MethodInfo, PropertyInfo sınıflarından Delegate yaratmak.

clock Şubat 8, 2012 16:59 by author Deniz |

Merhaba,

C# ile kod yazarken reflection kullanmamız gereken durumlarla çok sık karışılaşırız. Daha doğrusu gereken değil, kullansak hayatımızı kolaylaştıracak, kod tekrarını önleyecek durumlar olabiliyor. Reflection kullanarak bir çok şey yapabiliyoruz aslında, aklıma gelen bazı yararlı işlemler ;

  • Assemblyler içerisindeki tipleri, tipler içerisindeki memberları, memberların tiplerini, generic mi değil mi, public mi private mi vs... bilgileri elde edebiliyoruz, manipüle edebiliyoruz.
  • Attributelere göre memberları arayabiliyoruz
  • Runtime'da tip bilgisini kullanarak nesnelerimizin instance larını oluşturabiliyoruz.
  • MethodInfo ve PropertyInfo lardan yola çıkarak invoke işlemlerini gerçekleştirebiliyoruz.
Aslında ihtimaller sınırsız, elimizde herangi bir nesnenin Metadatası var. 
 
Elbette ki static yazılan koda göre daha yavaş çalışıyor, özellikle MethodInfo veya PropertyInfo (getter, setter) invoke işlemleri, invoke edilen nesne sayısı arttıkça performans olarak oldukça fark edebiliyor.
 
Aslında bu yazımın konusuda bu invoke işlemlerini hızlandırmak ile ilgili. Bildiğimiz üzere C# dilinde Delegeler belli bir signature'a sahip methodları işaret edebilen nesnelere deniyor. Delegeleri kullanarak hayatımızı oldukça kolaylaştırabiliyoruz. MethodInfo ve PropertyInfo larda aslında ihtiyaçımız olan signature bilgisini içeriyorlar, Fazlası...


IIS 7 Web sitelerini ve Application Poollarını durdurmak, başlatmak ve recycle etmek.

clock Ocak 24, 2012 01:23 by author Deniz |

Merhaba,

Web teknolojileriyle haşır neşir olan her developer, mesleki hayatının önemli bir bölümünde IIS ile uğraşır. Her ne kadar IIS 7 ile beraber bir siteyi hemen hemen default ayarlarıyla yayınlamak daha kolaylaşlasa da, IIS oldukça ince detayları olan bir konu. Farklı farklı durumlara göre farklı ayarlar yapılabiliyor.

Geçen yazdığım yazıda Microsoft.Web.Administration namespace'indeki sınıflar ve yapabildikleriyle ilgili birkaç örnek vermiştim. O süreci yaşarken IIS Sitelarını start, stop etmek, Application Poolları start, stop ve recycle etmek aralarında ki farkları öğrenmek durumda kaldım. Bu yazımda öğrendiklerimi paylaşmak istiyorum.

Hepimizin bildiği gibi, IIS bize Sitelarımızı durdurup, başlatmak, yeniden başlatmak gibi yetenekleri sağlıyor. Ama durdurmak veya başlatmak aslında arka planda her zaman beklediğimiz davranışları sergilemeyebiliyor (en azından ben bilmiyordum Smile). 

Hemen farklara geçelim ; Fazlası...



Microsoft.Web.Administration ve IIS 7

clock Ocak 21, 2012 15:01 by author Deniz |

Merhaba,

Kısa bir süre önce çalıştığım yerde, IIS Üzerinde ki Web Sitelerinin programatik olarak restart edilmesi ile ilgili bir ihtiyaç oluştu. Bu ihtiyacın sebebini, benden soğumamanız için alatmayacağım Smile , gerçekten saçma bir probleme, saçma bir çözüm bulunması gerekti.

.Net Framework 3.0'dan itibaren Microsoft IIS'e API seviyesinde ulaşmamıza imkan tanıyor. Böylelikle IIS ile ilgili hemen hemen herşeyi programatik olarak yapabiliyoruz, Application Poolları yönetme, virtual directory ekleme, siteleri yönetme vs. Bunuda Microsoft.Web.Administration namespace'i altında ki sınıfları kullanarak yapabiliyoruz.

Microsoft.Web.Administration.dll'ni Windows klasörünüz içerisinde \System32\inetsrv pathinde bulabilirsiniz.

 

İsterseniz neler yapabileceğimizi bir göz gezdirelim. Fazlası...



Merhaba

clock Ocak 19, 2012 23:55 by author Deniz |

Bu benim ilk blogum. Nasıl bir giriş yazısı olmalı, neler yazmalıyım bilmiyorum. 2005 yılından beri .Net ile ilgileniyorum, 2007 yılından beride developer olarak çalışıyorum. Bu sektör hakkında öğrendiğim şeylerden biride öğrenilen teorik bilgilerin ,pratiğe uygulandığı çoğu zaman bir takım sorunlarla karşılaşıldığı. Aslında bu blogu açmamda ki amacımda bu zaten, projeler esnasından karşılaştığım problemleri başkalarıylada paylaşmak. Bilgiyi paylaşmaya inanıyorum. Yıllarca birçok developerın yaptığı gibi bir problemim olduğunda Google'da araştırıp, çözümlere ulaştım. Bazen kısa sürede, bazen uzun sürede. Bazende birçok kaynaktan okuduğum bilgileri harmanlayarak sorunumu çözdüm. Ama bugüne kadar konuya sadece yiyici olarak yaklaştım Laughing 

Dediğim gibi bu sektörde edinilen tecrübelerin çok önemli olduğunu düşünüyorum. Birde yeni teknolojiler, yaklaşımlar gördüğüm zaman çok hevesle yaklaşan bir insanım, butür şeyler hakkında da yazmak istiyorum. Bilgiyi paylaşmayı seviyorum.

Vakit buldukça buraya birşeyler yazacağım, umarım okuyan herkezin yararına olucak şeyler çıkar.

Bir sonraki yazımda görüşünceye dek herkese iyilikler dilerim.