Asp.Net Core Nedir? Ne Gibi Değişiklikler Bizi Bekliyor?

By Burak Tungut - 10.7.2016 - 4 Yorum - Kategori Asp.Net Core

Selamlar herkese!

Bir Ramazan bayramını daha geride bıraktık. Umarım herkes için güzel bir bayram olmuştur. Herkesin geçmiş bayramını kutlamak isterim :)
Beni soracak olursanız sadece 2 gün tatil yapabildim. Asıl tatilimi bir kaç hafta sonraya bırakıyorum.

Bayram tatiline çıkmadan bir kaç hafta önce Microsoft tarafında harika gelişmeler oldu diyebilirim. Uzun zamandır ben ve çoğu meslektaşım Asp.Net 5'in gelişmelerini takip ediyorduk. Hatta kulaklarını çınlatayım Yiğit ile her yeni gelişmeyi şirketin Slack kanalından paylaşıp uzun uzun tartışıyorduk. Sonra bir haber aldık ki "Asp.Net 5 Öldü". Hatta bu başlıkla bazı paylaşımlar yapıldı, Scott Hanselman'ın blog'un da dahi bulabilirsiniz.
Tabi ölen bir şey yok aslında. Sadece bu yeni mimarinin adını değiştirmeye karar vermişler. Artık .Net Core ve Asp.Net Core olarak isimlendireceğiz bu teknolojileri. 

Bu yazımı biraz sohbet havasında geçirmek istiyorum çünkü çok çok detaylı konulara değinmeyeceğiz. Asıl amacım bu yazıda Asp.Net Core'a bir giriş yapmak, ne olup, ne olmadığı hakkında bilgiler verebilmek. Yer yer official dökümanından alıntılar / çevirilerde bulabilirsiniz. Umarım çeviri yapmama çok kızmazsınız :) Giriş niteliği taşıyan bir yazıda ne kadar yaratıcılık beklenir ki :) ?

Asp.Net Core Nedir?

"Evet şimdi kitaplarımızın 18. sayfasını açıp tanımı okuyalım. Kim sesli okumak ister?" tadında bir giriş yapmayacağız tabi ki :)
Asp.Net Core aslında Asp.Net (ve .Net Framework) 'in yeniden dizayn edilerek bir çok konseptin değiştirildiği yep yeni bir teknoloji. Üstelik cross-platform çalışabilmek üzere geliştirilmekte. Diğer bir deyiş ile uygulamalarınızı sadece IIS'te Windows bir makinada host etmek zorunda değilsiniz. İsterseniz Linux'ta hatta Mac'te dahi host edebilirsiniz.

Terimlerde karışıklık olmaması adına şöyle bir not düşmek isterim;

.Net Framework bir uygulama çatısı iken, Asp.Net onun üzerine kurulmuş ve web uygulamaları yapmamızı sağlayan bir teknoloji (ya da framework diye de nitelendirebiliriz)
.Net Core ise tıpkı .Net Framework gibi bir uygulama çatısı iken Asp.Net Core onun üzerine kurulmuş ve yine web uygulamaları yapmamızı sağlayan bir teknoloji.

Halilye karşılaştırmalara yer verdiğimiz noktalarda eğer Asp.Net Core'dan bahsediyorsak karlılaştırdığımız nokta Asp.Net'te ki hali ve .Net Core'dan bahsediyorsakta karşılaştırdığımız nokta .Net Framework olacak.

Asp.Net Core Mimarisi

Asp.Net Core açık kaynak olarak geliştirmekte. Amacı ise Asp.Net'te geliştirebildiğiniz projeleri yine geliştirebilirken IoT ve cloud bazlı projelerinizi daha efektif ve esnek bir şekilde geliştirebilmek. Efektif ve esnek diyorum çünkü hali hazırda var olan .Net Framework ve Asp.Net ile de zaten IoT ve cloud bazlı projeler geliştirebiliyorsunuz. Ancak .Net Core'un getirdiği ve değiştirdiği bazı geleneksel yaklaşımlar sayesinde tüm bunları daha efektif ve esnek yapabiliyor, çok daha performanslı uygulamalar geliştirebiliyorsunuz.

Çünkü Asp.Net Core optimize edilebilir bir mimariye sahip. Asp.Net'e göre karşılaştırdığımızda sadece "Hello World" yazabilmek için dahi onlarca referansa ve System.Web'e bağımlı değilsiniz. Projenizin ihtiyacına göre pipeline'i zenginleştirebiliyor, istediğiniz modülleri NuGet üzerinden dahil edebiliyorsunuz.

Nasıl ki ORM kullanmak istediğiniz bir Asp.Net uygulamanıza NuGet üzerinden EntityFramework'ü referans olarak ekleyebiliyorsanız artık Asp.Net Core ile IIS'in dahi bağımlılığını NuGet üzerinden ekleyebileceksiniz. Daha önce duymadıysanız ilk benden duyun, artık IIS'e bağımlı değilsiniz :)

Official dökümanda bulacağınız bazı kök değişiklikleri aşağıda listeledim. Bir çoğuna ilerleyen yazılarımda detaylarıyla değineceğiz.

  • Bir çok client-side teknoloji ile entegrasyon. (Gulp, Grunt, TypeScript, Knockout, Angular.js)
  • web.config'den bağımsız ve esnek Configuration yapısı. (Sonraki yazılarımızdan birinin ana konusu)
  • Built-in Dependency Injection. (AutoFac'ten dahi lightweight bir DI entegrasyonu olduğunu söyleyebiliriz)
  • Modüler yapı ve onun getirdiği lightweight bir pipeline.
  • IIS'in haricine self-hosting de yapılabilmesi
  • Cross-platform oluşu
  • Açık kaynak geliştirilmesi

Bir Asp.Net Core Uygulamasının Yapısı

Bir Asp.Net Core uygulaması geliştirebilmek için Visual Studio 2015'e sahip olmalı ve üzerine Update 3'ü kurmalısınız. Ardından Asp.Net Core SDK'yi yüklemeniz gerekli. Bunu çok küçük bir google araması yaparak bulabilirsiniz.

Bir adet Asp.Net Core uygulamasının aslında console app'ten farkı yok. İlk karşılaşacağınız şey tıpkı console app'lerde göreceğiniz Program.cs ;

using System;
using Microsoft.AspNetCore.Hosting;

namespace FirstAspNetCoreApplication
{
    public class Program
    {
        public static void Main(string[] args)
        {
            var host = new WebHostBuilder()
                .UseKestrel()
                .UseStartup<Startup>()
                .Build();

            host.Run();
        }
    }
}

Web uygulamamızın inşaa edilmesini sağladığımız nokta burası. Burada WebHostBuilder sınıfından bir instance alıyor ve istediğimiz modülleri dahil edip en sonda build ediyoruz. Builder pattern'in kullanıldığı bu yapı açıkçası benim çok hoşuma gitti. Web.config'e satırlar dolusu modülü yazmaktanta her bir modüle karşışık gelen nesneler ile pipeline'ı build edebilmek çok daha iyi olmuş diyebilirim.

Burada gördüğünüz UseKestrel methodu aslında Kestrel adlı web server'ın projeye dahil edilmesini sağlıyor. Bu ismi artık bol bol duyacağız çünkü kendisi cross-platform geliştirilmekte olan lightweight bir web sunucu. Linux, Windows ya da Mac farketmeksızın bu web sunucuyu kullanabilrisiniz. Ancak IIS, Tomcat ya da Nginx gibi gelişmiş özelliklere sahip değil. Zaten olmasıda istenmiyor ve beklenmiyor. Kestrel ile sadece request'leri yakalayıp kendi pipeline modüllerimiz (bahsedeceğimiz middleware) ile response'lar vermemiz sağlanıyor. Ancak gelişmiş web sunuculardan olan beklentilerimiz için yine IIS ya da başka bir platformda isek Nginx gibi ürünleri uygulamamızın önüne proxy görevi görmek üzere kurabiliriz.
Bu konuya Asp.Net Core ile Hosting adlı bir başka yazımda detaylarıyla deyineceğiz.

Startup Sınıfı ve Pipeline'ın Genişletilmesi

WebHostBuilder sınıfı içerisindeki UseStartup methodu ise içinde ConfigureServices ve Configure adlı iki adet method bulunmasını beklediğimiz sınıfı göstermekte. 

public class Startup
{
    public void ConfigureServices(IServiceCollection services)
    {
    }

    public void Configure(IApplicationBuilder app)
    {
    }
}

ConfigureServices methodunda ister built-in DI yardımıyla istersek replace ettiğimiz kendi DI component'imiz ile MVC, Web API, EntityFramework gibi kullanmak istediğimiz framework'leri projemize birer Service olarak dahil edebiliyoruz.

Configure methodu ile de projemize istediğimiz middleware component'leri ekleyebiliyor, pipeline'ımızı kendi istediğimiz doğrultusunda istediğimiz sırayla işletilecek şekilde dizayn edebiliyoruz. Bir kaç paragraf öncede middleware isminden bahsetmiştik. Asp.Net'ten hatırlayacağımız HttpModule'lerin tam olarak olmasada karşılıkları diyebiliriz. Built-in bir çok middleware component bulunduğu gibi kendi implementasyonlarımızıda yazabiliriz.

Middleware başlı başına aslında büyük ve önemli bir konu çünkü Asp.Net Core'un esnek olmasını sağlayan noktaların başında geliyor. Öyle düşünüyorum ki bundan bir kaç sonraki yazım tamamiyle bu konu üzerine olacak. Asp.Net Core içerisinde built-in gelen bazı middleware component'ler aşağıdaki gibi;

  • Static file
  • Routing
  • Authentication
  • Environment
  • Map / Use gibi methodlar

Asp.Net Core'u Asp.Net'e Tercih Edebilir Miyiz?

Ne yazık ki henüz değil. Her ne kadar release olmuş olsada Asp.Net Core şu haliyle, Asp.Net içerisinde bulunan tüm özelliklerin karşılayabilecek bir ürün değil. Aynı şey Entity Framework Core içinde geçerli. Tüm Core teknolojilerinin Roadmap'lerine Github repo'ları üzerinden ulaşabilirsiniz. Halen bir çok özelliğin eklenmesi için çalışıldığını söyleyebiliriz.

Asp.Net Core'u geliştiren community'nin açıkladığı gibi henüz bitiş noktasına gelmiş bir ürün değil. Ürün üzerine çalışmalar yoğun bir şekilde devam etmekte ve harika gelişmelerin gelmeye devam edeceğide söylenmekte.

Bakalım daha nasıl gelişmeler göreceğiz. Bu süre boyunca Asp.Net Core 1.0 sürümündeki tüm detayları sizlerle paylaşmaya özen göstereceğim. Bende yazılarımdaki odak noktamı tamamen bu noktaya çevirmiş durumdayım. 

Sonraki yazımda görüşmek üzere,
Esen kalın :)

Burak, güzel bir giriş yazısı olmuş. Aklımdaki, "Asp.Net MVC Core da gelecek mi?" sorusuna bu yazı ile yanıt bulmuş oldum. Cross-platform özelliği hakkında örnek içeren ayrı bir yazı yazabilir misiniz? Teşekkürler.
Yorum Bırak

Facebook
Son Yorumlar