Mvc projemizde jQuery ajaxı kullanarak, bir içeriğin altına yorum ekleme ve silme işlemini gerçekleştireceğiz. Bu işlemin bize kazandırdıklarını, mvc ile uygulama geliştirmenin bize kattıklarınıda anlamaya çalışacağız. Umarım faydalı olur.
Videoyu daha kaliteli izlemek için buradan indirebilirsiniz.
Projeyi buradan, videoyu buradan indirebilirsiniz.
Scaffolding ile çok hızlı ve kontrollü bir biçimde proje geliştirebilirsiniz. Video da anlattıklarımı burada ki kaynaktan öğrendim, zaten Steve Sanderson abimizin aleti bu :) Takip etmenizide öneririm. Aklıma gelmişken videoda veritabanın scaffolding tarafından oluşturulduğunu söylüyorum fakat bu yanlış, veritabanını entity framework oluşturuyor ;) Video da bir önceki video olarak bahsettiğim videoya Ado.Net Code – First (Ctp5) – Video adresinden ulaşabilirsiniz. Günlüğümde scaffolding ile ilgili diğer yazılara buradan ve buradan ulaşabilirsiniz.
Steve Sanderson‘ unun burada ki ve MIXX 11de ki videosunu izlemenizi şiddetle tavsiye ederim.
Video çekme olayını çok seviyorum fakat beni çok yoruyor. Kendi başınıza ekrana bakarak bir şeyler anlatmaya çalışıyorsunuz. Çoğu zaman aynı şeyleri defalarca tekrar ediyorsunuz, bu da konsantrenizin tamamen bozulmasına sebep oluyor. Sınavlarda bildiğinizi unutmak durumuna bile kalıyorsunuz, en azından ben kalıyorum :) Umarım konuyu anlatabilmişimdir, hatalarım varsa affola :)
Projeyi buradan, videoyu buradan indirebilirsiniz.
Son zamanlarda sosyal ağlara daha fazla zaman ayırmaya başladım, bunun en büyük sebebi ortak ilgi alanlarına sahip olduğum insanlarla tanışmak ve fikir alış-verişi yapmak. Nitekim bu sayede güzel diyaloglar kurduğum bir çok arkadaşım bulunuyor fakat her şeyin fazlası zarar olduğu gibi sosyal ağlarda da gereğinden fazla bulunmak ciddi problemleri peşinden getiriyor. Aşağıda sıralayacağım maddeler tamamen kendi yaşadığım tecrübelerden ibarettir..
- Eğer sosyal ağlarda Twitter, FriendFeed, Facebook vb.. kendinize bir yer edinmişseniz yani insanlar yazdıklarınıza sıklıkla tepki veriyorsa, egonuz sizi bu ağlarsız yaşayamam moduna sokuyor. Geçmiş olsun ! artık ne telefonu elinizden düşürebilirsiniz, nede bilgisayar başındayken bu sayfalardan kopabilirsiniz.
- Birinci maddeyle ilişkili olarak, eğer işinizi bilgisayarınızla icra ediyorsanız yine geçmiş olsun ! Artık aklınız hep sosyal ağlarda ! “Girdime acaba kim tepki verdi bir bakayım. Madem girdim şuna da bir şey yazayım, aAAaa bu arkadaşın yazdıkları ne kadar ilgi çekici onuda takip edeyim..” derken birde bakmışsınız mesai bitmiş..
- Yine yukarıdaki maddelere bağlı olarak, bilgisayar başında yazılım geliştirmek yada şöyle yazayım ciddi konsantrasyon isteyen işler yapıyorsanız “o eski halimden eser yok şimdi” adlı şarkıyı dinleye bilirsiniz :) Kim ne derse desin konsantreyi olumsuz yönde etkiliyor haa istisnai durumlarda olumlu etkileri de yok değil. 20 satır kod 5 dakika sosyal ağ, 20 dakika tasarım 10 dakika sosyal ağ. Arkadaş insan kendi alı koyamıyor..
Sosyal ağlar giderek büyüyor, aynı zamanda kullanım alanları da genişliyor. Hal böyle olunca insan bu ortamlardan uzak kalamıyor. Bu ağların bize kattıkları aldıklarından çok daha fazla, uzakta kalmamak lazım, e o zaman gelecekte nasıl çalışacağız ? Benim kişisel görüşüm internetsiz bilgisayarlarda geliştirme yapılacağı yönünde. Öğle arası gibi gelecekte internet arası diye bir durumla karşılaşırsak şaşırmamak lazım :) Tekrar yazmakta fayda var, bunlar benim görüş ve tecrübelerim. Sosyal ağları kötülemek yada benzeri bir düşüncem yok, olamazda. Siz diğer sayfalara da göz atın ben sosyal bağlara gittim geliyorum :)
Geçen ki yazımda paket yönetiminden bahsetmiştim. Şimdi paket yönetim konsolunun nasıl kullanıldığına bakalım. Unutmadan bu örneğimizde mvcScaffolding paketini yükleyeceğiz sebebi ilerleyen günlerde bu konu hakkında bir kaç yazı yazmak istememdendir :)
Öncelikle View / Other Windows / Package Manager Console ye tıklayıp konsolumuzu açıyoruz.
(daha fazla…)
Konu çok olunca böyle bir başlık yazmayı uygun gördüm. Son zamanlarda özellikle web tarafında bir Mvc ve Entity dir gidiyoruz. Gün geçmiyor ki yeni bir şey çıkmasın, haliyle ipin ucu kaçtığında neyin ne olduğunu anlamak bir hayli güçleşiyor ve içinden çıkılmaz bir hal alıyor. Bu gelişmeleri maddeler halinde dilimin döndüğünce paylaşmak istiyorum.
- Ado.Net Entity ile bir model oluşturup bu model üzerinde veritabanı işlemlerimizi gerçekleştiriyorduk. Entity ile varolan vt yi modelleye bildiğimiz gibi model den de vt yi oluşturabiliyorduk. Bu yaklaşım entitynin bir nevi başlangıç noktasıydı. Zaman ilerledikçe problemler de beraberinde geldi. En başta modelimizi otomatik oluşturduğu için müdehale etmek bir hayli zordu ve müdahale sonunda eğer modelimizde değişiklik yapılmışsa sonradan eklemelerimiz sıfırlanıyordu, çünkü kodlar yeniden oluşturuluyordu. Ayrıca çoğu zaman hiç kullanmayacağımız methodlar boşuna yük oluyordu. İşin birde doğrulama (validation) boyutu vardı ki takla üstüne takla atmak gerekiyordu. Modeli ben yazacam arkadaş, hakimiyet bizde olacak ! Modele hakim olamadığınız durumlarda başlarda güllük gülistanlık olan işlemler ilerde çok can sıkıcı ve içinden çıkılmaz durumlara yol açıyor. Allah’ tan code-first yaklaşımıyla bu isteklerimiz yerine geliyor. Modelimizi istediğimiz gibi yazabiliyoruz, doğrulama işlemlerini basitçe çözebiliyoruz ve tek hakim biz oluyoruz ama yine eksiklikler var, validation için ekstra classlar yazmamız gerekiyor. Şimdi elimizde 2 tane seçenek bulunuyor. Entity Data Model (edm) ve Code-First. Burada ki video da edm den kod oluşturucular (code generator) tarafından code-first bir modelin nasıl oluşturulup kullanıldığını anlatmaya çalışmıştım, yani emd yi kullanarak code-first modelimizi oluşturabiliyoruz. Diğer bir durum ise edm yi hiç işe katmayıp model sınıflarımızı yazıp veritabanımızı bu modelden oluşturmak. Bu seçenek kontrolün tamamıyla elimizde olduğu tek seçenek. Özetleyecek olursak Ado.Net bize şu yolları sunuyor, direk Edm kullanımı, edm den model oluşturma ve edm yi işe hiç katmadan direk modeli yazıp kullanmak.
- Paket yönetim konsulu (Package Manager Console) Son zamanlar da yine Microsoft cephesinin üzerinde epeyce durduğu bir konu paket yönetim konsolu. Amacı belli kaynaklardaki özellikle açık kaynak kodlu (open source) projeleri, kolaylıkla çalıştığımız projeye eklememize olanak sağlıyor. Örneğin projemize facebook connect yada x bir ekstra mekanızma (:D) eklemek istediğimizde arayıp bulmamıza gerek kalmadan bir komutla indirip projemize ekleyebiliyoruz. Temel komutlar burada güzel bir şekilde listelenmiş. Nuget projesi şu anda en büyük ve popüler açık kaynak paket deposu. Şu anda 907 adet paket hali hazırda kullanılmak için bekliyor. İndirilen paketler proje dosyalarının bir üst dizininde packages klasörünün içerisinde depolanıyor ve referans olarak projenize ekleniyor.
- mvcScaffolding Bu yapıyı yukarıda bahsettiğimiz paket yönetimini kullanarak mvc projenize ekleyip kullanabilirsiniz. Nedir bu scaffolding diye soracak olursanız Crud (Create, read, update ve delete) işlemlerini 1. maddede bahsettiğimiz modelimize uygun bir şekilde, gerekli olan yapıyı ve formları bizim yerimize otomatik olarak oluşturan açık kaynak bir araç. Steve abimiz konuyla ilgili tüm bilgileri blogunda anlaşılır bir şekilde paylaşıyor, ayrıca burada ki videosunu sonuna kadar izlemenizi şiddetle tavsiye ediyorum. Akıllıca tasarlanmış bir model üzerinden çok hızlı bir şekilde saat gibi işleyen projeler yapabilirsiniz.
Dipnot: .Net ile web projesi geliştirmek isteyen arkadaşlarımız var fakat nereden başlayacakları konusunda fikir sahibi değiller. Bunun en büyük sebebi .net tarafında iki türlü geliştirme şeklinin varlığı. Bir tarafta webForm diğer tarafta mvc. Mvc sadece .net de değil diğer web geliştirme ortamlarında da oldukça popüler bir tasarım deseni oldu. Benim konuyla ilgili fikrim direk mvc ile başlamaktan yana sebebi ise şu; webform da bir sürü kontrol bulunuyor ve bu kontrollerin bir sürü özellikleri bulunuyor. Kontrollerin çalışma mantığını anlamak, kullanım yerlerine ve şekillerine hakim olana kadar epeyce zamanınız geçer. Çoğu kişide hiç alışık olmadığı bu yapı karşısında pes eder ve bırakır. Mvc de ise html elemanları ile iş yapıldığından zaten önceden bir aşinalık söz konusudur. Örneğin; input, textarea, selectbox, form gibi.. Php, asp vb.. diğer dillerde nasıl kullanılıyorsa aynen burada da kullanabiliyorsunuz. Enerjinizin %90 lık kısmını model ve kontrol kısmına vermeniz durumunda öğrenilmesi ve kavranılması daha kolay gibi geliyor bana.. Özellikle mvc3 ile birlikte eksiklerin giderilmesi, yeni özelliklerin eklenmesiyle çok da zevkli bir uygulama geliştirme imkanınız oluyor. Günün sonunda bir tasarım desenine uygun uygulamada geliştirmiş oluyorsunuz.
Asp.Net de sayfamıza eklediğimiz her kontrolün bir id si bulunuyor. Javascript ile kontrollerimize erişmek istediğimizde bu id leri direk kullanabiliyoruz. Eğer masterpage kullanırsak işler biraz değişiyor. Sayfamız masterpage den türediği zaman kontrollerin idlerine bir ön ek geliyor. Bunu kod tarafında göremesekte sayfa yorumlandıktan sonra kaynak kodlarına baktığımızda id lerin değiştiğini görüyoruz. Haliyle jquery ile ilgili id deki elemanı seçmemiz için kod tarafında ki id değil, kullanıcı (client) tarafında ki id yi kullanmamız gerekiyor. Bu durumda İki şekilde problemimizi çözebiliyoruz. Birinci çözüm yolu kontrollerin ClientID özelliğini kullanmak. <%=kontrol.ClientID%> dediğimizde geriye dönen id bizim kontrolümüzün sayfa yorumlandıktan sonra oluşan değerdir. Fakat bu yöntemi .js sayfamızda kullanmamız söz konusu değil bu sebepten direk .js içerisine html de oluşan id yi yazarak kullanabiliyoruz. Şöylede bir durum var hiç uğraşmadan kontrollerimize class atayıp yukarıdaki olaylara bulaşmadan direk class adını yazarak seçip istediğimiz işlemleri aynen yapabiliriz. Burada ki tek nüans id yakalama performansı class a göre daha iyi fakat bunu küçük işlerde görmemiz çok zor ;) Neyse umarım konu anlaşılmıştır. Aşağıda bir örnek bulunuyor, dilerseniz çalışan halini buradan indirebilirsiniz.
<script type="text/javascript">
jQuery(function($) {
$("#<%=date.ClientID %>").mask("99/99/9999");
$("#<%=phone.ClientID %>").mask("(999) 999-9999");
$("#ctl00_ContentPlaceHolder1_tin").mask("99-9999999");
$("#ctl00_ContentPlaceHolder1_ssn").mask("999-99-9999");
});
</script>
« Newer Posts Older Posts »