ASP.NET Özellikleri ve MVC 6

cross-platform tasarım
PRO

ASP.NET Özellikleri ve MVC 6

İlk defa canlı bir serüvenin içerisindeyiz! Bir framework geliştiriliyor, üstelik cross-platform, açık kaynak kodlu ve mimar Microsoft! Duyurular, yeni versiyonlar, etkinlikler ve blog yazıları aldı başını gidiyor. Böylesine hızla büyüyen ve ilgi gören nadir bir süreç, dikkatleri çok çabuk üzerine çekmiş gibi görünüyor. Bulut – Cloud dostu, esnek ve hızlı, uygulama bazlı versiyonlanabilen, ölçeklenebilir, modüler yeni nesil bir framework.
Release veya versiyon beklemeksizin bu ortamı irdelemek, üzerinde çalışmak gerekiyor. Kurumsal seviyede bir framework, topluluk gücünü arkasına alarak ve açık kaynak kod deposu olan GitHub üzerinde her an etkileşime müsait bir şekilde geliştiriliyor! Bu durum bunca yıl etkin bir şekilde kullandığımız mimarilerin kalbine misafir olmak gibi! Bu fırsatı değerlendirerek başlayalım ve bu framework üzerine cross-platform uygulama geliştirebilmek için elimizde ne tip enstrümanlar var inceleyelim.
ASP.NET 5 de öne çıkan başlıca özellikler:
1- Cross Platform
Şu an için Windows, OSX ve Ubuntu işletim sitemleri başta olmak üzere derlenip çalıştırılabilen bir framework. .NET Platform Standard ile uygulamanızın (Web API, Web Site) hangi sistem(ler) üzerinde koşacağını belirleyip geliştirme sürecine başlayabilirsiniz. ASP.NET 5 MVC 6 ile desteklenen sistemler için web uygulamaları, RESTful servisler (Web API) yazabilir ve uygulamalarınızı sanal makineler veya bulut hizmeti sağlayan (Azure, Amazon Web Services, DigitalOcean) markalar üzerinde ücretsiz (belirli bir süreye kadar) test edebilirsiniz.
2- Built-in Dependency Injection
Karmaşık back-end API ve servisleri yönetmek, bağımlıkları olabildiğince azaltmak adına yaygın bir prensip ve patern olarak karşımıza çıkan bu kavram:
IServiceProvider
Interface i ile framework ün merkezinde yer almaktadır.
Bir hizmetin (servis veya API) görevini yerine getirebilmek için ihtiyaç duyduğu tüm gereksinimleri (Diğer servis veya yardımcı sınıfları) rahatça – hiç birinden yeni bir Instance almadan elde edilebilmesini sağlayan çözücü görevini üstlenmiş bir tip olan Resolver:
// Gets the request-specific
public IServiceProvider Resolver
{
get
{
return HttpContext?.RequestServices;
}
}
sayesinde “bir istek (Request)” boyunca istediğimiz tipleri elde edebiliyoruz. Burada önemli bir husus ise; uygulamamızın Startup ya da Composition Root olarak isimlendirilen kısmında gerekli kayıtların (Registrations: Dynamic or Static) yapılmış olması. Böylelikle yapının sizi daha kaliteli kod yazmaya, prensipleri uygulamaya götürdüğü anlaşılabiliyor!
Örnekte ASP.NET 5 MVC 6 da varsayılan olarak InMemory-Cache olarak register edilmiş IDistributedCache interface i için Redis-Cache tipinin Singleton olarak kullanılabilmesi için:
// This will override any previously registered
// IDistributedCache service.
services.AddSingleton<IDistributedCache, RedisCache>();
kaydının Startup sınıfında koleksiyona eklenmesi yeterli olmaktadır.
(Detaylıca Dependency Injection)
3- HTTP Request Pipeline
ASP.NET 5 bir istekle (Request) ilgili tüm süreci masamıza servis ediyor! Baştan sona tüm scope birçok farklı operasyonla (loglama, filtreleme, cevap işleme ) desteklenebiliyor. Burada Middleware kavramına basitçe değinmek gerek;
İster:
app.Run(async context =>
{
await context.Response.WriteAsync(“Hello, World!”);
});
veya GitHub/UseMiddleware
public static class BuilderExtensions
{
public static void UseSocket(this IApplicationBuilder builder)
{
builder.UseMiddleware();
}
}
örneklerindeki yöntemler ile uygulama süreç ve isteklerinin genişletilebilmesi sağlanabiliyor.
4- Side-By-Side Versiyonlama
ASP.NET 5 ve .NET Core tabanlı bir uygulama çalıştığı ortamda her hangi bir ön paket – dahili (GAC) depo gerektirmez. Kendi klasör yapısındaproject.json dosyasında belirtilen paketleri Nugeu (Remote or Cache) üzerinden elde etmek süretiyle çalışır ve versiyonlama özelliklerini kullanır. Geliştirdiğiniz kütüphaneleri ister yerel ister uzak paket sağlayıcıları (Nuget, MyGet) sayesinde oluşturup versiyonlayıp yayınlayabilirsiniz. Bir diğer gelişme ise KoreBuild ve Sake ile Continuous Integration – Build otomasyonu. AppVeyor
5- JSON Formatında Konfigürasyon
Tercihe göre Strongly typed veya Dictionary formatında veri tipleriyle uyumlu (mapping) JSON formatında uygulama ayar dosyaları oluşturup bunları uygulamanıza şu şekilde dahil edebilir (Container Registration):
services.Configure(Configuration.GetSection(“AppSettings”));
ve Controller veya Service sınıflarınızda
private IOptions AppSettings;

public HomeController(IOptions appSettings)
{
AppSettings = appSettings;
}
built-in dependency injection özelliği sayesinde nesneyi elde edilebilirsiniz.
6- xUnit Runner DNX – Unit Tests
Kurumsal proje veya bir girişim için kurgulamaya çalıştığımız altyapı, araçlar, ek uygulamalar ve entegre olunan sistemlerin beraberinde getirdiği karmaşıklığı yönetmek her geçen gün daha fazla efor ve insan kaynağı gerektiriyor. Uygun kurgulanmış bir mimari ile birim ve operasyon testlerinizi ASP.NET 5′ in System.Web namespace inden arındırılmış yeni kurgusu ile tamamlayabilirsiniz.
IHttpContextAccessor
tipindeki interface ile veya
public HttpContext GetHttpContext(string contentType = “application/json”)
{
var request = new Mock();
var headers = new Mock();
request.SetupGet(f => f.ContentType).Returns(contentType);

var httpContext = new Mock();
httpContext.SetupGet(c => c.Request).Returns(request.Object);
httpContext.SetupGet(c => c.Request).Returns(request.Object);
return httpContext.Object;
}
yardımcı bir fonksiyon ile Mock HttpContext nesnesi elde edebilirsiniz.
Visual Studio Test Explorer, otomatize edilmiş build veya command line aracılığıyla testlerinizi çalıştırabilirsiniz.
project.json:
“commands”: {
“test”: “xunit.runner.dnx”
}
command line:
dnx test
7- Performans Testleri – Benchmarks
Birçok farklı tipte içerik ve eşzamanlı istekler oluşturarak uygulamanızın performansını ölçümleyebilirsiniz. Modern http enchmarking Tool – wrk ve ASP.NET Bencmarks
Cross Platform ASP.NET 5 Örnek Uygulama – GitHub

 

Arşivler