ASP.NET Core ile Çok Katmanlı Mimari Uygulamaları Geliştirme
ASP.NET Core, modern web uygulamaları geliştirmek için güçlü bir platform sunar. Bu makalede, ASP.NET Core kullanarak çok katmanlı mimari uygulamaları nasıl geliştirebileceğinizi detaylandıracağız. Çok katmanlı mimari, uygulama geliştirme sürecinde kodun daha iyi organize edilmesini ve sürdürülebilirliğini sağlar. Bu mimari yaklaşım, uygulamanın farklı katmanlara bölünmesiyle işlevselliğin modüler hale getirilmesine olanak tanır.
1. Çok Katmanlı Mimari Nedir?
Çok katmanlı mimari, yazılım uygulamalarının farklı işlevsel bölümlerini veya katmanlarını ayırarak geliştirilmesini sağlayan bir mimari modeldir. Bu model, genellikle üç ana katmandan oluşur:
– Sunum Katmanı (Presentation Layer)
– İş Mantığı Katmanı (Business Logic Layer)
– Veri Erişim Katmanı (Data Access Layer)
Bu katmanlar, uygulamanın farklı sorumluluklarını ayırarak, kodun daha temiz ve yönetilebilir olmasını sağlar.
Sunum Katmanı
Sunum katmanı, kullanıcı arayüzü ile ilgilenen katmandır. Bu katman, kullanıcıdan gelen istekleri alır ve uygun şekilde iş mantığı katmanına iletir. ASP.NET Core’da bu katman genellikle Razor Pages, MVC Controller veya Blazor gibi teknolojilerle uygulanır.
public class HomeController : Controller { private readonly IProductService _productService; public HomeController(IProductService productService) { _productService = productService; } public IActionResult Index() { var products = _productService.GetAllProducts(); return View(products); } }
Bu kod örneği, ASP.NET Core MVC kullanarak bir HomeController
sınıfı oluşturur. Sunum katmanında yer alan bu kontrolör, ürün listesini almak için iş mantığı katmanındaki IProductService
arayüzünü kullanır.
İş Mantığı Katmanı
İş mantığı katmanı, uygulamanın iş kurallarını ve veri işleme mantığını içerir. Bu katman, sunum katmanından gelen istekleri işler ve veri erişim katmanına yönlendirir. İş mantığı katmanında, genellikle servis sınıfları ve iş kuralları bulunur.
public class ProductService : IProductService { private readonly IProductRepository _productRepository; public ProductService(IProductRepository productRepository) { _productRepository = productRepository; } public IEnumerable GetAllProducts() { return _productRepository.GetAll(); } }
Yukarıdaki kodda, ProductService
sınıfı, ürün verilerini almak için veri erişim katmanındaki IProductRepository
arayüzünü kullanır. Bu sınıf, iş mantığı katmanının bir parçasıdır ve iş kurallarını uygular.
Veri Erişim Katmanı
Veri erişim katmanı, veritabanı ile etkileşim kurar ve verilerin depolanmasını, alınmasını ve güncellenmesini sağlar. Bu katman, genellikle Entity Framework Core veya Dapper gibi ORM araçları ile uygulanır.
public class ProductRepository : IProductRepository { private readonly AppDbContext _context; public ProductRepository(AppDbContext context) { _context = context; } public IEnumerable GetAll() { return _context.Products.ToList(); } }
Bu örnekte, ProductRepository
sınıfı, Entity Framework Core kullanarak veritabanından ürün verilerini çeker. Bu sınıf, veri erişim katmanının bir parçasıdır ve veritabanı işlemlerini kapsüller.
2. ASP.NET Core ile Katmanlı Mimari Uygulama Geliştirme
ASP.NET Core, çok katmanlı mimariyi destekleyen bir yapı sunar. Bu bölümde, ASP.NET Core kullanarak çok katmanlı bir uygulamanın nasıl geliştirileceğini adım adım inceleyeceğiz.
Proje Yapısının Oluşturulması
Çok katmanlı bir uygulama geliştirmek için öncelikle proje yapısını oluşturmalıyız. ASP.NET Core’da, genellikle her katman için ayrı bir proje oluşturulur. Bu projeler, genellikle bir çözüm dosyası altında toplanır.
– MyApp.Web: Sunum katmanı için bir ASP.NET Core Web projesi.
– MyApp.Business: İş mantığı katmanı için bir Class Library projesi.
– MyApp.Data: Veri erişim katmanı için bir Class Library projesi.
Bağımlılıkların Yönetimi
ASP.NET Core, Dependency Injection (DI) ile bağımlılık yönetimini kolaylaştırır. Her katmandaki bağımlılıkları, ASP.NET Core’un yerleşik DI konteyneri aracılığıyla yönetebiliriz.
public void ConfigureServices(IServiceCollection services) { services.AddControllersWithViews(); services.AddScoped<IProductService, ProductService>(); services.AddScoped<IProductRepository, ProductRepository>(); }
Bu kod, ASP.NET Core uygulamasında bağımlılık enjeksiyonu için servisleri kaydeder. IProductService
ve IProductRepository
arayüzleri, ilgili somut sınıflarla eşleştirilir.
Veritabanı Bağlantısının Yapılandırılması
Veri erişim katmanında, veritabanı bağlantısını yapılandırmak için DbContext
sınıfını kullanırız. ASP.NET Core’da, bu yapılandırmayı Startup
sınıfında yapabiliriz.
public void ConfigureServices(IServiceCollection services) { services.AddDbContext(options => options.UseSqlServer(Configuration.GetConnectionString("DefaultConnection"))); }
Bu kod, Entity Framework Core kullanarak SQL Server’a bağlanmak için DbContext
yapılandırmasını içerir. DefaultConnection
, appsettings.json
dosyasında tanımlanan bir bağlantı dizesidir.
Katmanlar Arası İletişim
Katmanlar arası iletişim, arayüzler ve bağımlılık enjeksiyonu aracılığıyla sağlanır. Her katman, diğer katmanlarla arayüzler üzerinden iletişim kurar ve böylece gevşek bağlılık sağlanır.
3. Performans Optimizasyonu
Çok katmanlı mimari, uygulamanın performansını artırmak için çeşitli optimizasyonlar yapmamıza olanak tanır. Aşağıda, ASP.NET Core uygulamalarında performansı artırmak için bazı stratejiler bulunmaktadır.
Önbellekleme
Önbellekleme, sık kullanılan verilerin bellekte saklanarak daha hızlı erişilmesini sağlar. ASP.NET Core, hem bellek içi önbellekleme hem de dağıtılmış önbellekleme desteği sunar.
public void ConfigureServices(IServiceCollection services) { services.AddMemoryCache(); } public class ProductService : IProductService { private readonly IMemoryCache _cache; private readonly IProductRepository _productRepository; public ProductService(IMemoryCache cache, IProductRepository productRepository) { _cache = cache; _productRepository = productRepository; } public IEnumerable GetAllProducts() { if (!_cache.TryGetValue("products", out IEnumerable products)) { products = _productRepository.GetAll(); _cache.Set("products", products, TimeSpan.FromMinutes(10)); } return products; } }
Bu örnek, bellek içi önbellekleme kullanarak ürün verilerini saklar. Veriler önbellekte yoksa, veritabanından alınır ve önbelleğe eklenir.
Asenkron Programlama
Asenkron programlama, uygulamanın performansını artırmak için kullanılabilir. ASP.NET Core, asenkron programlama için async
ve await
anahtar kelimelerini destekler.
public async Task<IEnumerable> GetAllProductsAsync() { return await _productRepository.GetAllAsync(); }
Bu örnek, ürün verilerini asenkron olarak alır. GetAllAsync
metodu, veritabanı işlemlerini asenkron olarak gerçekleştirir ve uygulamanın yanıt verme süresini artırır.
4. Güvenlik ve Hata Yönetimi
ASP.NET Core uygulamalarında güvenlik ve hata yönetimi, uygulamanın güvenilirliğini artırmak için kritik öneme sahiptir.
Kimlik Doğrulama ve Yetkilendirme
ASP.NET Core, kimlik doğrulama ve yetkilendirme için çeşitli mekanizmalar sunar. Örneğin, JWT (JSON Web Token) kullanarak kullanıcı kimlik doğrulaması yapabilirsiniz.
services.AddAuthentication(JwtBearerDefaults.AuthenticationScheme) .AddJwtBearer(options => { options.TokenValidationParameters = new TokenValidationParameters { ValidateIssuer = true, ValidateAudience = true, ValidateLifetime = true, ValidateIssuerSigningKey = true, ValidIssuer = Configuration["Jwt:Issuer"], ValidAudience = Configuration["Jwt:Audience"], IssuerSigningKey = new SymmetricSecurityKey(Encoding.UTF8.GetBytes(Configuration["Jwt:Key"])) }; });
Bu kod, JWT kullanarak kimlik doğrulama yapılandırmasını içerir. TokenValidationParameters
ile token doğrulama kuralları belirlenir.
Hata Yönetimi
Hata yönetimi, uygulamanın istikrarını sağlamak için önemlidir. ASP.NET Core, hata yönetimi için yerleşik bir mekanizma sunar.
public void Configure(IApplicationBuilder app, IWebHostEnvironment env) { if (env.IsDevelopment()) { app.UseDeveloperExceptionPage(); } else { app.UseExceptionHandler("/Home/Error"); app.UseHsts(); } }
Bu kod, geliştirme ortamında ayrıntılı hata sayfaları gösterirken, üretim ortamında özel hata sayfaları gösterir.
5. Gerçek Dünya Senaryoları
ASP.NET Core ile çok katmanlı mimariyi kullanarak çeşitli gerçek dünya senaryolarını ele alabiliriz. Örneğin, e-ticaret uygulamaları, içerik yönetim sistemleri veya kurumsal iş uygulamaları gibi projelerde bu mimari yaklaşım büyük avantajlar sağlar.
E-Ticaret Uygulaması
Bir e-ticaret uygulaması geliştirirken, çok katmanlı mimari kullanarak ürün yönetimi, sipariş işleme ve kullanıcı yönetimi gibi işlevleri modüler hale getirebilirsiniz. Bu yaklaşım, uygulamanın ölçeklenebilirliğini ve sürdürülebilirliğini artırır.
İçerik Yönetim Sistemi
İçerik yönetim sistemleri, dinamik içerik yönetimi gerektiren uygulamalardır. Çok katmanlı mimari, içerik yönetim sistemlerinin daha esnek ve yönetilebilir olmasını sağlar.
Sonuç
ASP.NET Core ile çok katmanlı mimari uygulamaları geliştirmek, uygulamanın sürdürülebilirliğini ve yönetilebilirliğini artırır. Bu mimari yaklaşım, kodun modüler hale getirilmesine ve farklı işlevlerin ayrılmasına olanak tanır. ASP.NET Core’un sunduğu güçlü özellikler ve araçlar sayesinde, çok katmanlı mimariyi etkili bir şekilde uygulayabilirsiniz.
Eğer ASP.NET Core uygulamalarınızı bulut tabanlı çözümler üzerinde barındırmak isterseniz, Cloud Sunucular veya Bulut Sunucular gibi seçenekleri değerlendirebilirsiniz. Bu tür hizmetler, uygulamalarınızın ölçeklenebilirliğini ve erişilebilirliğini artırmanıza yardımcı olabilir.