Microsoft Web katmanlarının tarihçesine bir bakış

Asp.Net Core, Microsoft‘un önceki web frameworklerinden çok farklı. Neden .Net Core‘a ihtiyaç duyulduğunu ve geliştirildiğini anlamak için, daha önce nelere sahip olduğumuzu ve son 15 yılda web geliştirme dünyasının nasıl değiştiğini görmemiz gerekiyor.

Bu makalede, Microsoft‘un web uygulamaları geliştirebilmemiz için bize sağladığı framework‘leri sırasıyla inceleyeceğiz.

Asp.Net Web Forms

Asp.Net Web Forms 2002‘de .Net Framework‘ün ilk sürümüyle birlikte piyasaya sürüldü.

İki farklı geliştirici grubuna hitap etmesi amaçlandı.

Birinci grupta, statik HTML ile dinamik sunucu taraflı kodların (genellikle VBScript) bir karışımıyla zaten web uygulamaları geliştiren ASP (Active Server Pages) geliştiricileri vardı.

İkinci grup, pazardaki değişiklikler nedeniyle web geliştirme dünyasına yaklaşmaya zorlanan çok sayıda masaüstü (WinForms) uygulama geliştiricisinden oluşuyordu ve bu geliştiriciler genellikle HTML yazmayı bilmiyorlardı. Ekran tasarımını, nesneleri IDE‘nin (Visual Studio) tasarımcı yüzeyine sürükleyerek yapıyorlardı.

Asp.Net Web Forms her iki gruba da hitap edecek şekilde tasarlandı.

Zengin özelliklere sahip ve kolay öğrenilebilir Olay Tabanlı Programlama (Event Based Programming) modeli sayesinde birçok yeni geliştiricinin kolaylıkla web uygulamaları oluşturmasına yardımcı oldu.

Yıllar geçtikçe web uygulamaları geliştirirken ihtiyaç duyduklarımız çok değişti. Bu yeni değişikliklere hızlı ayak uyduran birçok araç-framework-platform doğdu ve bunları kullanan geliştiriciler işlerini daha verimli gerçekleştirdiler.

Örneğin, üretilen HTML üzerinde daha fazla kontrole sahip olmak, Ajax ve Javascript kütüphanelerini daha yaygın kullanmak ve (responsive tasarımlar sayesinde) mobil cihazlarda da çalışır uygulamalar geliştirmek istediler. Ancak Asp.Net Web Forms‘un bu gelişmelere ayak uydurması zordu, çünkü;

  • System.Web.dll ile yoğun biçimde birleşmiş olan devasa, monolitik bir yapısı vardı

  • Visual Studio‘ya dayanan programlama modeli göz önüne alındığında, Asp.Net Web Forms‘un sürüm döngüsü IDE ve .Net Framework ile bağlantılıydı, bu nedenle güncellemeler arasında aylar-yıllar geçiyordu

  • Internet Information Services (IIS), işletim sisteminin bir parçası olduğu için yeni özellikler eklemek veya güncellemek daha da zordu

Asp.Net MVC

Söz konusu sorunları çözmek için 2009‘da Microsoft Asp.Net MVC adıyla yeni bir web framework yayımladı.

Business ve Presentation katmanları arasında net bir ayrım bırakmak için Model-View-Controller (MVC) Design Pattern‘ine dayanıyordu ve HTML çıktısı üzerinde tam hakimiyet sağlıyordu.

Ancak, Asp.Net MVC, yavaş yayın döngüsün sorununu çözüyor ve HTML biçimlendirme soyutlamasını kaldırıyor olsa da, hala .Net Framework ve System.Web.dll üzerinde bağımlılıklar içeriyordu ve hala IIS‘e ve Windows‘a sıkı bir şekilde bağımlıydı.

Asp.Net Web API

Zamanla, yeni bir web programlama modeli ortaya çıktı;

Verileri sunucu tarafında işleyip tamamen render edilmiş sayfayı tarayıcıya göndermek yerine,

Çoğunlukla Ajax istekleri ile sadece gereken veriyi sunucudan alıp, client tarafında Javascript ile render etme (Single Page Applications - SPA)

Microsoft, daha önce Windows Communication Foundation (WCF) için geliştirdiği kütüphanenin daha hafif ve web uyumlu bir sürümünü uygulamak zorundaydı, bu çalışmadan Asp.Net Web API ortaya çıktı.

Asp.Net Web API büyük olasılıkla WCF ekibi tarafından geliştirildi ve Asp.Net ekibi tarafından geliştirilmediğinden, System.Web.dll ve IIS gibi bağımlılıkları yoktu.

Böylece Asp.Net Web API, System.Web.dll, IIS, Windows gibi daha büyük parçalardan bağımsız, daha küçük bir framework haline geldi.

OWIN ve Katana

Yukarıda incelediğimiz tüm framework ve kütüphanelerin farklı tip işletim sistemlerinde, farklı tip uygulama sunucularında çalışması gerektiğinde sıkıntılar baş gösteriyordu.

Çünkü, belli bir tip uygulama sunucusunda çalışacak şekilde yazılan uygulama başka bir tip uygulama sunucusunda çalışmıyordu.

.Net topluluğundan bir grup geliştirici bu sorunu ortadan kaldırmak için Open Web Interfaces for .Net (OWIN) adı altında standartlar bütünü oluşturulmasına öncü oldular.

Microsoft, Katana adında OWIN uyumlu bir web sunucusu yayınladı. Bununla birlikte, bazı sorunlar hala devam etti.

Asp.Net MVC, System.Web.dll bağımlılığından dolayı, Katana içinde çalışmıyordu. Ayrıca, farklı takımlar tarafından ve farklı zamanlarda geliştirilen bu frameworklerin farklı programlama modelleri vardı.

Örneğin, Asp.Net MVC ve Asp.Net Web API Dependency Injection (DI) destekliyordu, ancak farklı şekillerde.

Geliştiriciler aynı uygulama içinde MVC ve Web API birlikte kullanmak istediyse, bunları iki kez uygulamak zorundaydılar.

Asp.Net Core

Her yeni framework ile .Net Framework‘ün potansiyeli daha da gelişti, fakat pek çok konu hala çözülmeyi bekliyordu;

  • Windows olmayan bir sistemde .Net uygulamaları çalıştırılamaz.

  • Bağımlılıklar, .Net uygulamalarını, yüzlerce uygulamanın tek bir makinede çalıştığı ve çok hızlı ölçeklendirilmesi gereken bulut gibi yüksek yoğunluklu senaryolara daha az uygun hale getiriyor.

  • .Net proje sisteminin karmaşıklığı, Visual Studio‘nun dışında .Net uygulamalarının geliştirilmesini zorlaştırıyor.

Olası çözümün, sıfırdan başlamak, Asp.Net Framework‘ün, tamamen modüler olacak şekilde yeniden tasarlamak olduğu açıktı.

Ayrıca, cross-platform olması büyük bir artı olacaktı.

Bu sebeplerden dolayı Microsoft, .Net Core adını verdiği yepyeni bir framework geliştirdi ve Asp.Net Core adı ile de yepyeni bir web framework‘ü yayınladı.

Unity3D oyununda güneşi otomatik hareket ettirmek

Bu makalede Unity3D oyun sahnesinde yer alan güneşi nasıl otomatik hareket ettireceğimizi inceleyeceğiz.

Unity3D oyununda sahnenin aydınlanmasını sağlayan ışık kaynağı yani güneş aslında sahnede yeralan Directional Light nesnesidir.

Bu makalede Directional Light nesnesini gündüz ve geceyi oluşturacak şekilde nasıl hareket ettireceğimizi göreceğiz.

Hemen Unity3D açalım ve yeni bir proje oluşturalım (ben projeye GunesDogudanDogarBatidanBatar ismini verdim)

Unity3D oyun projesi oluşturma

Eğer Directional Light nesnesini Hierarchy panelinden seçip, Rotation değerleri ile oynayarak döndürecek olursak, sahnemizin gündüz / gece geçişleri gibi aydınlanıp / karardığını görebiliriz.

Unity3D oyun projesinde Directional Light ile güneş yapma

Yapmamız gereken, bir C# Script oluşturup, Directional Light nesnesine atamak ve bu dönüşü programatik olarak yaptırmak;

Hemen Hierarchy panelinde Directional Light seçili iken Inspector panelinde Add ComponentNew ScriptSunController.cs yazıp Enter tuşuna basalım.

Yeni oluşturduğumuz SunController.cs dosyasını açalım ve içine aşağıdaki kodları yazalım;

Böylece oyun başladığı andan itibaren güneş (Directional Light) otomatik olarak dönmeye ve gece / gündüz etkisi oluşturmaya başlayacak.

Gece ve gündüz geçişinin hızı ile oynamak isterseniz koddaki 0.01f değeri ile oynamanız gerekiyor

Not: Bu makaleyi yazarken internette yaptığım araştırmalardan ve bulduğum kod örneklerinden, yöntemlerden de faydalandım :)

Fluent Interface ve Class nasıl geliştirilir?

Geçen günlerde LINQ: .NET Language-Integrated Query tarzı kütüphaneler nasıl yazılıyor diye düşünürken ve internette gezinirken VinKamat kullanıcısının 02 Temmuz 2009 tarihinde attığı aşağıdaki tweet’e denk geldim;

LINQ tarzı kodlara örnek olarak aşağıdaki koda bakabiliriz;

Yukarıdaki örnekte de görebileceğimiz gibi, OrderList değişkenindeki listeyi Where() methodu ile filtreliyoruz, OrderBy() methodu ile sıralıyoruz, Take() methodu ile sadece istediğimiz kadar kaydı alıp, Select() methodu ile geriye yeni bir dizi döndürüyoruz.

Biz de benzer şekilde çalışacak bir kod geliştirelim, bu örnekte yemek oluşturacak kodları yazacağız. Öncelikle aşağıdaki interface‘i projemize ekleyelim;

Bu interface‘de önemli nokta, tüm method‘ların kendi interface‘inin tipinde sonuç döndürmesi.

Böylece projeye aşağıdaki gibi bir class ekleyebiliriz;

Bu class‘ta önemli nokta, tüm method’ların this anahtar kelimesi ile kendi sınıfını geri döndürmesi. Böylece bu methodları bir zincir (chain) oluşturacak şekilde aşağıdaki gibi kullanabiliriz;

Mülteci Hackathon Etkinliği Şubat 2017

Yoğun kar yağışı nedeniyle 1 hafta gecikmeli yapılan Mülteci Hackathonu 03 Şubat 2017 - 04 Şubat 2017 tarihlerinde FMV Işık Üniversitesi Şile Kampüsünde gerçekleştirildi.

Microsoft‘un IoT, Mobil (Xamarin) ve Bulut (Azure) çözümlerini anlatmak üzere ben de etkinlikte konuşmalar yaptım.

Mültecilerin yaşadığı sorunlara çözüm bulmak gibi ulvi bir amaçla gerçekleşen etkinliğe beni davet eden sevgili İrem Sefa Yayımlar‘a ve etkinliğe katılan tüm arkadaşlara çok teşekkür ederim.

Angular ile Password Strength Meter yapımı

Bu makalede ‘Bir Angular projesinin üyelik formunda şifrenin yeteri kadar güçlü girildiğinden nasıl emin olabilirim?’ sorusunu cevaplayacağız.

Önce bir Angular projesi oluşturacağız, Bootstrap 4 ile stillendireceğimiz üyelik formu yapacağız ve şifre giriş alanının altına, girilen şifrenin güçlülük derecesine göre kırmızıdan-yeşile doğru hareket eden bir bar ekleyeceğiz.

Hemen projeyi oluşturmak istediğimiz dizine Command Prompt (Windows) veya Terminal (MacOS, Linux) içerisinden gidelim ve aşağıdaki komutu çalıştıralım;

Angular CLI, projeyi oluşturduktan sonra npm aracılığıya gerekli tüm dependency‘leri download edecek.

Projeyi oluşturduğumuz dizinde aşağıdaki komutu çalıştıralım, böylece Angular CLI projeyi http://localhost:4200 adresi üzerinden yayınlamaya başlayacak;

Projenin src dizininde yer alan index.html dosyasının head taglarının arasına aşağıdaki satırı ekleyelim ve projede Bootstrap 4 css framework‘ünü kullanmaya başlayalım;

Projenin src/app/app.component.html dosyasını açalım ve aşağıdaki kodlar ile değiştirelim;

Yukarıdaki kodlarda bootstrap‘in stillerini kullanarak bir üyelik formu oluşturduk. Şifre giriş alanının altında .strength-meter css class‘ına sahip olan div, şifrenin ne kadar güçlü olduğunu göstereceğimiz alan olacak.

Formun input elementlerine yazdığımız [(ngModel)] attribute'lerine dikkat! Bu attribute'lerin değeri, sayfanın Typescript kodlarında oluşturacağımız değişkenlerin isimleri ile aynı olmalı. Son olarak, button elementine yazdığımız (click) attribute'ü, button'a tıklandığında çalıştırılacak Typescript method'unun ismini içermeli!

Projenin src/app/app.component.css dosyasını açalım ve aşağıdaki kodlar ile değiştirelim;

Böylece ekranda ihtiyaç duyduğumuz tüm css‘leri de yazmış olduk.

Eğer sayfaya bu haline bakacak olursak, aşağıdaki gibi bir sonuç görmemiz lazım;

Şimdi gelelim src/app/app.component.ts dosyasına ve aşağıdaki kodları yazalım;

Öncelikle form elemanlarının değerlerini alabilmek için fullName, email ve password değişkenlerini string olarak tanımlıyoruz.

Ayrıca Kaydol butonuna tıklandığında yapılacak işleri yazacağımız signup() methodunu da tanımlıyoruz.

Şifre alanında keyup event‘i tetiklendikçe (yani şifre belirlenirken) çağırılan updateMeter() methodunda şifrenin karmaşıklık seviyesini hesaplayacağımız kodları yazıyoruz.

Şifrenin karmaşıklık seviyesini belirlemek için internetten yardım aldım, stackoverflow'daki çeşitli örnek kodları inceledim ve birkaç tanesini birleştirerek bu makaledeki kodu yazdım. Sizler kendiniz de bir kod geliştirebilir veya benim yaptığım gibi hazır yazılmışlardan faydalanabilirsiniz ;)

Eğer sayfayı yenileyecek ve sonuca bakacak olursak, aşağıdaki ekranı görmemiz lazım;

Bu makalenin kodlarına Github üzerinde polatengin hesabımda yer alan Password-Strength-Meter aracılığıyla erişebilirsiniz.

Engin Polat hakkında

Chief Architect, Microsoft RD, Microsoft MVP

Ada ve Ege'nin babası ;)

Kategoriler

İstatistik

Makale Adedi: 459

Creative Commons Lisansı