Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Daha taşınabilir, daha bağımsız .NET uygulamaları tasarlamak

Eser Ozvataf
November 03, 2018

Daha taşınabilir, daha bağımsız .NET uygulamaları tasarlamak

Eser Ozvataf

November 03, 2018
Tweet

More Decks by Eser Ozvataf

Other Decks in Programming

Transcript

  1. Cover photo: iStockphoto/cybrain
    Daha taşınabilir, daha bağımsız
    .NET uygulamaları tasarlamak
    Eser Özvataf
    dotnetKonf

    03.11.2018

    View Slide

  2. ESER ÖZVATAF
    /eserozvataf
    /eserozvataf
    HAKKIMDA
    ▸ Süreç Lideri @ Setur
    ▸ Sektörde 18 Yıl İş Deneyimi
    ▸ Açık Kaynak Ekolünden
    ▸ Blockchain üzerine çalışmalar yapan

    lisansüstü öğrencisi

    View Slide

  3. BUGÜN BAHSEDECEKLERİM
    ▸ Uygulama Taşınabilirliği
    ▸ Bağımlılıkların Tespiti
    ▸ Daha Taşınabilir Olmanın
    Getirileri
    ▸ Taşınabilir Uygulama Tasarlamak
    ▸ Kod Tasarım Çözümleri
    ▸ Mimari Çözümler
    ▸ Araç Çözümleri
    ▸ Paketlemek
    ▸ Ortam Yapılandırmaları
    ▸ Uygulamaları Platform Bağımsız
    Paketlemek
    ▸ Örnek Uygulama

    View Slide

  4. UYGULAMA TAŞINABİLİRLİĞİ

    View Slide

  5. BAĞIMLILIKLARIN TESPİTİ
    UYGULAMA TAŞINABİLİRLİĞİ
    NuGet Paketleri
    SaaS Hizmetler / Veri Sağlayıcıları
    Servisler / APIler
    Dosya / Kurulum Bağlılıkları Symbiot / Parazit Uygulamalar
    Uygulama
    “Bende çalışıyor”
    Platform / İşletim Sistemi

    View Slide

  6. DAHA TAŞINABİLİR OLMANIN GETİRİLERİ
    UYGULAMA TAŞINABİLİRLİĞİ
    Yan Etki Üretmemek
    Çoklu Cloud Provider Desteği
    Çoklu Platform Desteği
    Ölçeklenebilirlik
    Aynı Uygulamanın Farklı Ortam Kurgularıyla Çalışabilmesi
    Dağıtık Sistemlere İmkan
    Daha Net Ölçülebilirlik
    Test Edilebilirlik

    View Slide

  7. KOD TASARIM ÇÖZÜMLERİ
    TAŞINABİLİR UYGULAMA TASARLAMAK
    Koda asla hardcoded/sabitlenmiş bir bilgi eklemeyin

    View Slide

  8. KOD TASARIM ÇÖZÜMLERİ
    TAŞINABİLİR UYGULAMA TASARLAMAK
    Microsoft.Extensions.Configuration ve Microsoft.Extensions.Options’u kullanın
    Ortam bazlı belirleyebildiğiniz konfigurasyon dosyalarınız olsun
    Konfigurasyon dosyalarınız environment variable’lar ile ezilebilsin

    View Slide

  9. KOD TASARIM ÇÖZÜMLERİ
    TAŞINABİLİR UYGULAMA TASARLAMAK
    İşletim sistemleri arasındaki farkları gözardı etmeyin

    View Slide

  10. KOD TASARIM ÇÖZÜMLERİ
    TAŞINABİLİR UYGULAMA TASARLAMAK
    Tarih/Saat standartlarını kullanın
    Her sistem aynı yerellik bilgisine sahip değil

    View Slide

  11. KOD TASARIM ÇÖZÜMLERİ
    TAŞINABİLİR UYGULAMA TASARLAMAK
    Dependency Injection uygulayın (Microsoft.Extensions.DependencyInjection)

    View Slide

  12. MİMARİ ÇÖZÜMLER
    TAŞINABİLİR UYGULAMA TASARLAMAK
    ▸ Kütüphane gereksinimleri için
    bağımlılık yönetimi araçlarını
    kullanın (NuGet)
    ▸ Farklı işlevlere sahip uygulamaların
    kod tabanlarını ayrı tutun
    ▸ Her müşteriniz için ayrı derlemeler
    yerine Multi-Tenancy kullanın
    ▸ Episodik Kurgu ile Stateless ve
    Event-Driven uygulamalar tasarlayın
    ▸ Dosyaları ancak okumak için
    kullanın, diğer IO işlemlerinden
    uzak durun
    ▸ Platformlarla uyum kontrolleri için
    integration testler yazmaya çalışın

    View Slide

  13. ARAÇ ÇÖZÜMLERİ
    TAŞINABİLİR UYGULAMA TASARLAMAK
    ▸ Coverage Tool - Coverlet
    ▸ Statik analiz için .NET Core
    Analyzers
    ▸ Powershell ve Bash scriptleri yerine
    MSBuild
    ▸ Visual Studio yerine .NET Core SDK
    CLI

    View Slide

  14. TAŞINABİLİR UYGULAMA TASARLAMAK

    View Slide

  15. ORTAM YAPILANDIRMALARI
    PAKETLEMEK
    Development Testing Staging Production
    Ortam Development Testing Staging Production
    Konfigurasyon
    Dosyası
    app.Development.json app.Testing.json app.Staging.json app.Production.json
    IDovizKurlariProvider DovizKurlariMockProvider TcmbTestProvider TcmbProvider TcmbProvider
    IRepositoryProvider RepositoryMockProvider RepositoryProvider RepositoryProvider RepositoryProvider
    Connection String localhost:5006/db mongodb.local/db db-staging.x.com/db db.x.com/db

    View Slide

  16. UYGULAMALARI PLATFORM BAĞIMSIZ PAKETLEMEK
    PAKETLEMEK
    ▸ Uygulamanızın tüm ortamlarda
    dotnet run ile çalıştığından,

    dotnet build ile derlendiğinden,

    dotnet test ile test edilebildiğinden
    emin olun
    ▸ Uygulamanızı self-contained bir
    biçimde publish edin
    ▸ Uygulamanızı Dockerize edin
    ▸ Uygulamanızı Docker-Compose ile
    ayağa kalkabilir bir hale getirin
    ▸ CI/CD kullanıyorsanız Visual Studio
    ve NuGet.exe ile değil, .NET Core
    SDK ile işlemlerinizi gerçekleştirin

    View Slide

  17. TASSLE
    ÖRNEK UYGULAMA

    View Slide

  18. ESER ÖZVATAF
    /eserozvataf
    /eserozvataf
    https://acikkaynak.info
    https://eser.ozvataf.com
    Sorular?

    View Slide