Skip to content

.NET Framework vs .NET Core

Genel Bakış

Bu bölümde, .NET Framework ve .NET Core arasındaki temel farkları, kullanım senaryolarını ve geçiş stratejilerini inceleyeceğiz.

Mülakat Soruları ve Cevapları

1. .NET Framework ve .NET Core arasındaki temel mimari farklar nelerdir?

Cevap: - .NET Framework: - Monolitik yapı - Windows'a bağımlı - GAC (Global Assembly Cache) kullanır - System.Web bağımlılığı - IIS gerektirir

  • .NET Core:
  • Modüler yapı
  • Cross-platform
  • NuGet paket yönetimi
  • Self-contained deployment
  • Kestrel web sunucusu

Örnek Kod:

// .NET Framework Web.config
<?xml version="1.0" encoding="utf-8"?>
<configuration>
  <system.web>
    <compilation debug="true" targetFramework="4.7.2" />
  </system.web>
</configuration>

// .NET Core appsettings.json
{
  "Logging": {
    "LogLevel": {
      "Default": "Information"
    }
  }
}

2. .NET Core'un performans avantajları nelerdir?

Cevap: - Daha hızlı başlangıç süresi - Daha az memory kullanımı - Daha iyi ölçeklenebilirlik - Asenkron operasyonlarda daha iyi performans - Container desteği ile daha iyi kaynak yönetimi

Örnek Kod:

// .NET Core'da performans optimizasyonu
public class PerformanceExample
{
    // Span<T> kullanımı
    public void ProcessData(ReadOnlySpan<byte> data)
    {
        // Düşük seviyeli memory erişimi
    }

    // ValueTask kullanımı
    public async ValueTask<int> GetDataAsync()
    {
        // Asenkron operasyon optimizasyonu
        return await Task.FromResult(42);
    }
}

3. .NET Framework'ten .NET Core'a geçiş stratejileri nelerdir?

Cevap: 1. Analiz aşaması: - Bağımlılıkların tespiti - Windows-specific kodların belirlenmesi - Third-party kütüphanelerin kontrolü

  1. Geçiş planı:
  2. Adım adım geçiş
  3. Side-by-side deployment
  4. Feature flag kullanımı

  5. Test stratejisi:

  6. Unit testlerin güncellenmesi
  7. Integration testlerinin yazılması
  8. Performance testlerinin yapılması

Örnek Kod:

// .NET Framework'ten .NET Core'a geçiş örneği
public class MigrationExample
{
    // Eski .NET Framework kodu
    public void OldMethod()
    {
        using (var connection = new SqlConnection("connectionString"))
        {
            // ADO.NET kullanımı
        }
    }

    // Yeni .NET Core kodu
    public async Task NewMethod()
    {
        using var connection = new SqlConnection("connectionString");
        await connection.OpenAsync();
        // Dapper veya Entity Framework Core kullanımı
    }
}

4. .NET Core'un container desteği nasıl çalışır?

Cevap: - Docker desteği - Microservice mimarisi için uygunluk - Container orchestration (Kubernetes) entegrasyonu - Environment-based configuration - Health check desteği

Örnek Kod:

// .NET Core Docker desteği
public class Program
{
    public static void Main(string[] args)
    {
        CreateHostBuilder(args).Build().Run();
    }

    public static IHostBuilder CreateHostBuilder(string[] args) =>
        Host.CreateDefaultBuilder(args)
            .ConfigureWebHostDefaults(webBuilder =>
            {
                webBuilder.UseStartup<Startup>();
            });
}

// Dockerfile örneği
FROM mcr.microsoft.com/dotnet/aspnet:5.0 AS base
WORKDIR /app
EXPOSE 80
EXPOSE 443

5. .NET Core'da dependency injection nasıl çalışır?

Cevap: - Built-in DI container - Service lifetime yönetimi (Singleton, Scoped, Transient) - Constructor injection - Interface-based programming - Configuration binding

Örnek Kod:

// Startup.cs
public class Startup
{
    public void ConfigureServices(IServiceCollection services)
    {
        // Singleton service
        services.AddSingleton<ICacheService, CacheService>();

        // Scoped service
        services.AddScoped<IUserService, UserService>();

        // Transient service
        services.AddTransient<IEmailService, EmailService>();
    }
}

// Controller kullanımı
public class UserController : ControllerBase
{
    private readonly IUserService _userService;

    public UserController(IUserService userService)
    {
        _userService = userService;
    }
}

Best Practices

  1. Geçiş Stratejisi
  2. Incremental migration
  3. Feature toggle kullanımı
  4. A/B testing
  5. Rollback planı

  6. Performans Optimizasyonu

  7. Async/await pattern
  8. Memory management
  9. Caching stratejileri
  10. Connection pooling

  11. Güvenlik

  12. HTTPS enforcement
  13. CORS yapılandırması
  14. Authentication/Authorization
  15. Security headers

Kaynaklar