Ahmet Oğuz Koca

Sosyal olaylar.

Asp.net MVC projelerinde ViewModel kullanımı.

 

Asp.net MVC'de Controller sınıflarınızdan view sayfalarınıza istediğiniz nesneleri geçebilmeniz için bir çok yöntem olsada (viewbag, viewdata, entity classları v.s.) kanımca bu imkanların efektif olarak kullanımı neredeyse mümkün değil. Özellikle çalışma zamanı sırasında tip dönüşümü hatalarından ve controller'da bu bilgileri doldurma sırasından oluşan problemlerden (null değer v.s.) dolayı dynamic viewbag yapısı zamanla sadece çile kaynağı haline gelebiliyor. Özellikle unit testing kullanmıyorsanız view tarafında oluşan hataları gidermek proje geliştirme sürecinizin büyük bir bölümünü oluşturabiliyor.

Bütün bu problemlerin üzerinden gelebilmek amacıyla çeşitli tasarım desenlerinden kotarımlar yaparak bir yapı geliştirdim ve bu yapı sayesinde proje geliştirme sürecimi hayli kısaltabildim. Aslen bu yapı endüstri standartlarına çok uygun olmasada özellikle hızlı projeler geliştirmek adına size de bir çok avantaj sağlayabileceğinden sizlerle paylaşmak istedim. Açıklamamı fazla uzatmadan direkt ilgili kodları paylaşıyorum.

 

Öncelikle bütün ViewModel'lerimizi türeteceğimiz bir ViewModel classi oluşturuyoruz. 

http://pastebin.com/ehdsFwtT

 

Bir eticaret sitesi anasayfası yaptığımızı varsayaraktan basit bir AnasayfaViewModel Class'i oluşturuyoruz. 

Class'in içinde view tarafınfa ihtiyaç duyacağımız çeşitli classların liste tipinde örnekleri bulunuyor

http://pastebin.com/vPNFpv1M

 

Controller da ViewModel içinde tanımladığımız listelerimizi dolduruyoruz. 

http://pastebin.com/wD8QXxBT

 

View'imize geçtiğimiz ViewModel class'imiz üzerinden ihtiyaç duyduğumuz işlemleri gerçekleştiriyoruz.

http://pastebin.com/zrp8Jdkk

 

Pastebin üzerinden verdiğim kodlara gerekli açıklama satırlarını ekledim ancak sorularınız olursa bana sosyal medya kanalıyla ulaşabilirsiniz.

twitter.com/aokocax ,friendfeed.com/aokocax

 

 

 

İyi Unit Testlerinin sahip olduğu özellikler

 

Fransız yazılım mühendisi bir arkadaş iyi 'unit test'leri yazmak için izlediği yöntemleri listelemiş, ben de faydalı olacağını düşünerekten paylaşmak istedim

  • Test classları sadece bir tek class'i test eder.
  • Test metodları sadece bir tek metodu test eder.
  • Değişken ve method isimleri açıktır.
  • Test durumlarının okunabilirliği yüksektir.
  • Testler beklenen exceptionları test eder.
  • Testler direkt veritabanı erişimi yapmazlar.
  • Testler direkt network erişimi yapmazlar.
  • Test için kullanılan kodlar kod standartlarına uyar temiz, okunabilir ve anlaşılabilirdir.
  • Testler olası etkileri (side effect), limit değerleri ve null değerleri kontrol eder (bir exception oluşoyor olsa bile)
  • Herhangi bir konfigürasyon yapmadan testler her an çalşabilir durumdadır.
  • Testler compleks yapı ve metodları simüle etme için 'mock' (taklit etme) kullanır.

 

Sql Server LocalDB tanıtımı

 

 
Microsoft bir kaç hafta kadar önce SQL Server Denali CTP3’ün duyurusunu yaptı ve yeni sürümle birlikte Sql Server Express’e developer ihtiyaçları gözetilerek yeni bir ekleme yapıldığını duyurdu. LocalDB olarak adlandırılan bu ekleme ile developerlar geliştirme yaptıkları makinalara bütün bir sql server örneği (instance) yükleme zahmetinden kurtulabilecekler.

Bilindiği gibi Sql Server Express, ücretli Sql Server versiyonlarının çeşitli limitlerle sınırlandırılmış bir versiyonu ancak bu sürüm diğer ücretli versiyonlar ile tamamen uyumlu çalışmakta. Öyleki gerekli lisans anahtarlarıyla bile Sql Server’inizi daha üst versiyonlara taşıyabiliyor ve limitleri kaldırabiliyorsunuz. Bu imkan aynı zamanda developerların geliştirme yaptıkları makinaların sistem kaynaklarını sql server’a ayırma problemi ile birlikte geliyordu. LocalDB ile Microsoft, Sql Server'a API seviyesinde uyumluluk getirerek bu kaynak problemini ortadan kaldırmak adına yeni bir yaklaşım getirmiş oldu.

LocalDB hakkında bazı bilgiler.

1) LocalDB, diğer Sql Server versiyonları gibi sqlsevr.exe’yi kullanmaya devam ediyor. Uygulama Sql Server’da olduğu gibi bütün client side provider’ları ile çalışabilmekte (ado.net,odbc v.s.).

2) Windows Servisi olarak değil Proses(Process) olarak çalışmakta (servis olarakta çalıştırılabiliyor), bağlantının kopması ile birlikte bir kaç dakika içinde kendi kendini kapatmakta.

3) AttachDbFileName Property’si ile veritabanı dosyanızı spesifik bir konuma koyma imkanı sağlıyor.

4) Veritabanı servisleri bulunmamakta.

5) Şu an için LocalDb kurmak için Sql Serrver Expres kurup LocalDb özelliğini seçmelisiniz ancak daha sonra bu zorunluluk daha sonra ortadan kaldırılacak.

Kaynaklar

 

Alan adı türetmek için güzel bir servis

Daha önce bir çok kez ihtiyaç duyduğum ancak adını hatırlamadığımdan dolayı kullanamadığım bir servis olan domai.nr'a bugünkü gezinimim sırasında tekrar rastladım ve burdan sizlerle de paylaşmak istedim. Bundan sonra bu servisi bulmak için domainzr, domainer, domain name creator araması yapmak zorunda kalmayacağım :), Siz de sık sık alan adı türetmek durumunda kalıyorsanız bir yerlere kaydetmenizde fayda var.

 

Girişimcilere öneriler -"Do more faster" kitabından

Üzerinde çalıştığım son birkaç projenin istediğim başarıyı sağlamaması üzerine Ar-Ge çalışmalarımı tekrar girişimcilik üzerine yoğunlaştırmaya karar vermiş bulunuyorum :). Bugün girişimcilik konusunda yeni çıkan kitapları ararken geçen yıl okuduğum "do more faster" kitabına gözüm ilişti, girişimcilik adına okuduğum kitap sayısı fazla olmasa da bu kitap okuduğum en güzel kitaplardan biriydi. Okuduğum sırada kitaptan öğrendiklerimi niçin birebir paylaşmadığımı düşünerekten kitabı okuduğum dönem aldığım notları aramaya koyuldum ve nihayet eski bir e-mail ekinde notlarımı bulabildim (çok şükür). Liste halinde sizlerle paylaşacağım bu notlar kitabın içindeki örnek girişimlerden çıkarılan derslerden alınmakta.  Aslında arkalarında yatan hikayeler de paylaşılsa daha faydalı olabilir ancak bunun için ayrılması gereken zamanın çok fazla olmasından dolayı ben sadece cümle cümle aldığım notlarımı paylaşacağım. Kitabı online olarak okumak isteyen arkadaşlar "kobobooks.com" üzerinden satın alabilirler.

 

Özel olarak sormak istediğiniz bir şey olursa lütfen yorum olarak bırakın.

  • Fikirleriniz çalınabilir ama tutkunuz ve uygulama beceriniz asla.
  • Herkes mükemmel fikirlere sahip olabilir ama sadece tecrübeli girişimciler bunları başarıya çevirebilir.
  • Fikirlerinizi paylaşmakta cesur olun.
  • Tutkunuza odaklanın ve ufak bir sıkıntıyı veya ihtiyacı ele alın ki bu 'ihtiyaç' dünyada hiç kimsenin sizden daha iyi çözemeyeceği bir şey olsun.
  • Tutkunuz geceleri onun için uyanık kalmak isteyeceğiniz daha doğrusu uyumak istemeyeceğiniz bir şey olmalı. Kalbinizin sesini dinleyin.
  • "Değerli bir şeyler üretin ve müşterilerinizi dinleyip başa dönün" Mantra.
  • Kullanıcılarınızın alışkanlıkları hakkında "kanıtlanmış datalar" toplamaya odaklanın, sürekli onlar hakkında bilgi toplayın.
  • Mümkün oldukça küçük kalmaya çalışın kaybetmeniz zor olur.
  • İşinizin çıkış noktasına odaklanın (projenizin çıkış fikrine) gelen cazip teklifler sizi büyüme ivmemizi sağlayan hedeften koparmasın.
  • Make users happy, make money.
  • Kendi tutkularınızı tatmin etmeye çalışırsanız (kendi ihtiyaç duyduğunuz proje) ürününüzü iyi tanımlayabilir ve başarılı olabilirsiniz.
  • Çok ilkel özelliklerede sahip olsa da mümkün olan en kısa sürede prototip çıkarmaya çalışın.  İlk ipod'un(apple) wireless özelliği bile olmadığını aklınızda bulundurun.
  • Bir fikrin doğruluğunu test etmenin en kolay yolu onu gerçekleştirip feedback almaktır.
  • Kullanıcı datası oksijen gibidir. Ürününüzü feedback’siz geliştirdiğiniz her saniye, aslında ürününüzün havasızlıktan giderek daha kötüye gittiği anlardır. Hiçbir şey sizi ürününüz kullanılmaya başladığında topladığınız kullanım bilgilerinden daha iyi yönlendiremez.
  • Prototype ne bilmediğinizi bilmenizi sağlar.
  • Yapabiliyorsanız ilk andan itibaren müşterilerle çalışmaya çalışın onların para ödemeye razı olacaları özellikleri geliştirmeye çalışın.
  • Ulaşmaya çalıştığınız marketin büyüklüğünü doğru hesaplayın, küçük ve maddi durumu kötü marketlere girmeyin.
  • Her girişimcinin izlemesi gereken yol şudur; "kesin bir planınız olsun ama her zaman müşterilerinizi, çalışanlarınızı, akıl verenleri ve kalbinizi dinleyin". Gittiğiniz yolun sizi gitmek istediğiniz yöne doğru götürmeyeceğine dair sinyaller aldığınızda değiştirmekten çekinmeyin.
  • Tecrübeli mentorların verecekleri önerilere dikkat edin, sizin yapmanız muhtemel hataları onlar daha önceden yapmışlardır. Tekerleği tekrar keşfetmeyin.
  • Hatalarınızın sizi tanımlasına izin vermeyin. Onların size bir şeyler öğretmesini sağlamalısınız. Bir sonraki sefer neyi değişik yapmanız gerektiğinin göstermelerini sağlayın.
  • ABD harici bir ülkede başarısız olursanız insanlar size 3 metreden fazla yaklaşmazlar ama burda bu böyle değildir, başarısızlıklar onur madalyalarıdır. Başarısız olmaktan korkmayın.
  • Kaliteye özen gösterin rakamsal büyüklüğe değil, sizi gururlandıracak bir şeye sahip olursunuz. Sırtınızda taşımanız gereken bir şeye değil.
  • Mark Twain şöyle diyor; Yapmak isteyip yapmadığımız şeyler yapıp pişman olduğumuz şeylerden çok daha fazla acı verir. Harekete geçmekte yavaşlık göstermeyin.
  • Yaptıklarınız tutkuyla yapmaya çalışın, yapın ya da yapmayın ama denemeye kalkmayın. Bir firma kurmak denenmez, bir iş kurmakta denemez. Bir startup denenmez bir hedefi gerçekleştirmek için iş yapın.
  • Gerçek bir iş tek bir şeyle açıklanabilir. "İnsanların önemli bir ihtiyacını karşılayın ve onlardan gelir elde edebileceğiniz oranda ücret alın. Bunun en kolay yolu müşterilerinizi dinlemektir."
  • İnsanların neye ihtiyacı olduğunu öğrenmeye odaklanın ve onlara yardımcı olun sonra tekrar ve tekrar ve tekrar bunu yapın.
  • Hayatınızdaki dengelere önem verin nerede bırakmanız gerektiğini bilmeye çalışın, sınırlarınızı bilin. 
  • Kendi dengenizi bulmaya çalışın. Daha güçlü olursunuz.
  • Dengeniz doğru olmazsa er ya da geç düşersiniz.
  • Eğer tukularınıza yatırım yaparsanız inanılmaz olaylar yaşayabilirsiniz.
  • Ortaklıklarda başta çözemediğiniz problemler giderek daha da zorlaşır.
  • Mümkün olan en iyi kişiyi işe almaya çalışın başarı ve başarısız firmalar arasındaki fark budur.
  • Başarılı bir lider takımının önündeki yol bloklarını kaldırabilendir.
  • Müşteri odaklılık, tek satır kod yazmadan önce müşterilerin ödemeye razı olacağı işlere odaklanın.
  • Hayatınızda bugüne kadar yaptığınız güzel şeyleri düşünün üniversiteye nasıl başladınız, nasıl iyi bir iş teklifi aldınız, en sevdeiğin müzik parçasını nasıl buldunuz. Rastgelelik önemlidir açık olun, farklı şeyler yapın.
  • Ara sıra bilgisayarın başından kalkın çevre yapın.
  • Yatırımcı bulursanız daha önce hangi şirketlere yatırım yaptığını ve kaç yıldır bu işi yaptığını sorun "mutlaka teyit ettirin", çekingen olmayın. Cevap vermiyorsa/veremiyorsa direkt kaçın. Size faydadan çok zarar getirir.
  • Bazen kendinize 1 hafta ayırın ve etrafınızda olan biteni göremeye çalışın.

 

 

Windows üzerinde node.js ile çalışma

 

Geçen ay Microsoft yazılım geliştirme bölümünün başkanı Scott Guthrie twitter’dan node.js takımı ile çalışmaya başladıklarını duyurmuştu. Node.js’in 0.5.2 versiyonu ile birlikte resmi sitede windows için çalıştırabilir uygulama (exe) dosyası yayınlandı. Buradan indirerek windows makinalarınızda node.js uygulamalarınızı çalıştırmaya başlayabilirsiniz.
 
Uygulama dosyasını indirdikten sonra basit bir 'hello world' uygulaması yazmak için şu adımları izleyebilirsiniz.
 
Öncelikle sunucu üzerinde belirli bir portu gelecek talepleri dinleyecek javascript kodumuzu yazıyoruz.
 
var http = require('http');
http
.createServer(function(req, res){
 res
.writeHead(200,{'Content-Type':'text/plain'});
 res
.end('Hello World\n');
}).listen(1337,"127.0.0.1");
console
.log('Server running at http://127.0.0.1:1337/');
 
Bu kodu server.js adıyla node.exe dosyasını indirdiğiniz dizine kaydedip daha sonra komut satırından

node.exe server.js

ile çalıştırıyoruz.
 
Daha sonra tarayıcınızdan yazdığımız kod ile gelen talepleri dinlemek istediğimiz porta talepte bulunuyoruz.

 

 

 

Node.js hakkında daha detaylı bilgi sahibi olmak ve daha spesifik uygulamalar yazmak için bu kaynaklara göz arabilirsiniz.
 
Node.js ücretsiz e-kitap => http://www.nodebeginner.org/
 
Node.js çeşitli uygulamalar => http://nodetuts.com/index.html