ABP Framework ile Adım Adım Yazılım Geliştirme – Bölüm 2: Proje Mimarisini Anlama

Admin 

ABP Framework, modern ve sürdürülebilir uygulamalar geliştirmek için katmanlı mimari ve modüler tasarım prensiplerini benimser. Bu bölüm, ABP’nin temel mimari yapısını ve bileşenlerin birbirleriyle nasıl etkileşime girdiğini detaylı bir şekilde açıklayacaktır.

ABP’nin Katmanlı Mimarisi

ABP, yazılım geliştirme pratiklerindeki “ayrışım” (separation of concerns) ilkesine uygun olarak, her biri belirli bir sorumluluğu üstlenen katmanlara ayrılmıştır:

  • Domain Layer (Domain, Domain.Shared): Uygulamanın temel iş kurallarını, varlıklarını (entities), değer nesnelerini (value objects), domain servislerini ve spesifikasyonlarını barındırır. Domain.Shared projesi, hem sunucu hem de istemci tarafında kullanılacak DTO’lar, sabitler ve enum’lar gibi paylaşılan tipleri içerir. Bu katman, diğer tüm katmanların bağımlı olduğu çekirdek katmandır.
  • Application Layer (Application, Application.Contracts): Domain katmanındaki işlevleri kullanarak kullanıcı hikayelerini (use cases) ve uygulama iş mantığını uygular. Genellikle Application Services adı verilen sınıflar aracılığıyla CRUD (Create, Read, Update, Delete) operasyonlarını ve domain operasyonlarını düzenler. Application.Contracts projesi, uygulama servislerinin arayüzlerini ve bu servisler arasında veri transferi için kullanılan DTO (Data Transfer Object)‘ları tanımlar. Bu sayede, sunum katmanı ile uygulama katmanı arasındaki bağımlılık azalır.
  • Infrastructure Layer (EntityFrameworkCore, MongoDb, Redis vb.): Uygulamanın dış kaynaklarla (veritabanı, dosya sistemi, dış API’ler vb.) etkileşimini yöneten katmandır. ABP, varsayılan olarak Entity Framework Core entegrasyonu sunar (.EntityFrameworkCore projesi). Bu katman, repository implementasyonlarını, DbContext yapılandırmalarını ve dış servis entegrasyonlarını içerir.
  • Presentation Layer (Web, HttpApi, HttpApi.Client, Blazor, Angular vb.): Kullanıcı arayüzünü (UI) veya harici API’leri temsil eden katmandır. Kullanıcıdan gelen istekleri alır, uygulama katmanına iletir ve sonuçları kullanıcıya sunar.
    • Web: ASP.NET Core MVC/Razor Pages tabanlı web uygulamaları için.
    • HttpApi: RESTful API’ler için (genellikle mobil uygulamalar veya tek sayfa uygulamalar için).
    • HttpApi.Client: HttpApi katmanındaki servisleri tüketmek için kullanılan proxy sınıflarını içerir.

Modüler Yapı ve Modüllerin Birbirleriyle İletişimi

ABP Framework, güçlü bir modüler yapıya sahiptir. Her bir proje, kendi içinde bağımsız bir modül olarak kabul edilebilir ve AbpModule sınıfından türeyen bir sınıf ile temsil edilir. Modüller, [DependsOn(...)] niteliği kullanılarak birbirlerine bağımlılıklarını bildirir. Bu, bağımlı modüllerin servislerinin otomatik olarak kaydedilmesini ve doğru sırada başlatılmasını sağlar.

Modüller arası iletişim, genellikle Application.Contracts katmanında tanımlanan DTO’lar ve arayüzler aracılığıyla gerçekleşir. Ayrıca Event Bus (Bkz. Bölüm 11) mekanizması ile modüller gevşek bir şekilde iletişim kurabilir.

Dependency Injection (Bağımlılık Enjeksiyonu) Yapısı

ABP Framework, .NET Core’un yerleşik bağımlılık enjeksiyonu (DI) sistemini temel alır ve genellikle Autofac gibi gelişmiş DI konteynerleriyle entegre çalışır. Framework, servislerin yaşam döngüsünü (singleton, scoped, transient) yönetir ve bağımlılıkların otomatik olarak çözülmesini sağlar.

  • [Dependency(ReplaceServices = true)] gibi nitelikler veya AbpModule içindeki ConfigureServices metodu ile servislerin yaşam döngüsü ve implementasyonları kolayca yapılandırılabilir.
  • ITransientDependency, IScopedDependency, ISingletonDependency arayüzlerini implemente ederek sınıflarınızı otomatik olarak ilgili yaşam döngüsü ile DI konteynerine kaydedebilirsiniz.

AutoMapper Entegrasyonu

ABP, AutoMapper kütüphanesini kullanarak DTO’lar ile Entity’ler arasında kolayca dönüşüm yapmayı sağlar. Bu, özellikle uygulama servislerinde veri transferini basitleştirir ve manuel dönüşüm kodunu azaltır. Profile sınıfları oluşturularak entity-DTO eşleştirmeleri tanımlanır.

Domain-Driven Design (DDD) Prensiplerinin Uygulanması

ABP Framework, baştan sona Domain-Driven Design (DDD) prensiplerini benimser. Bu, iş mantığının (domain logic) açıkça tanımlanmış bir “domain” katmanında merkezileşmesini teşvik eder. Temel DDD kavramları ABP’de şu şekillerde uygulanır:

  • Entities (Varlıklar): Kimliği olan ve yaşam döngüsü boyunca değişebilen nesneler.
  • Aggregate Roots (Topluluk Kökleri): Bir grup varlığın tutarlılığını sağlayan ana varlık.
  • Value Objects (Değer Nesneleri): Kimliği olmayan, sadece değerleri ile tanımlanan nesneler (örn. adres, para birimi).
  • Domain Services (Domain Servisleri): Birden fazla varlığı veya değeri içeren iş mantığı için kullanılır.
  • Repositories (Depolar): Domain katmanında tanımlanan varlıklara erişimi soyutlar.

Bu katmanlı ve modüler yapı, uygulamanızın daha okunabilir, sürdürülebilir, test edilebilir ve ölçeklenebilir olmasını sağlar.

Recommended Posts

ABP Framework ile Adım Adım Yazılım Geliştirme – Bölüm 7: Kullanıcı Arayüzü Geliştirme

Uygulamanın kullanıcılarla etkileşim kurduğu katman olan Kullanıcı Arayüzü (UI) Katmanı, genellikle ASP.NET Core MVC (Razor Pages), Angular veya Blazor gibi teknolojilerle geliştirilir. ABP Framework, seçtiğiniz UI teknolojisiyle sorunsuz entegrasyon sağlayarak geliştirme sürecinizi hızlandırır ve ortak UI ihtiyaçlarını karşılar. Bu bölümde, ABP ile kullanıcı arayüzü geliştirmenin temel yönlerini ele alacağız. Seçilen UI Teknolojisine Göre Temel Yapılandırma […]

Admin 

ABP Framework ile Adım Adım Yazılım Geliştirme – Bölüm 6: API Katmanı Geliştirme

Modern uygulamalarda API (Application Programming Interface) katmanı, hem istemci uygulamalar (mobil, web) hem de diğer servislerle iletişim kurmak için kritik öneme sahiptir. ABP Framework, güçlü ve kolay yapılandırılabilir bir API katmanı oluşturmanızı sağlar. Bu bölümde, ABP’nin API geliştirme özelliklerini ve en iyi pratikleri inceleyeceğiz. Auto API Controller Özellikleri ABP Framework’ün en kullanışlı özelliklerinden biri Auto […]

Admin 

ABP Framework ile Adım Adım Yazılım Geliştirme – Bölüm 5: Application Layer Geliştirme

Application Layer (Uygulama Katmanı), uygulamanın kullanım senaryolarını (use cases) ve kullanıcı hikayelerini yönetir. Domain katmanındaki işlevleri kullanarak kullanıcı arayüzünden gelen isteklere yanıt verir ve sunum katmanı ile domain katmanı arasındaki bir köprü görevi görür. Bu bölümde, uygulama katmanının temel bileşenlerini ve geliştirme pratiklerini ele alacağız. Application Service’ler Oluşturma Application Service (Uygulama Servisi), dış dünyadan (UI, […]

Admin 

Leave A Comment