ABP Framework ile Ad?m Ad?m Yaz?l?m Geli?tirme ? B?l?m 2: Proje Mimarisini Anlama
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.Sharedprojesi, 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.Contractsprojesi, 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 (
.EntityFrameworkCoreprojesi). 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:HttpApikatman?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 veyaAbpModulei?indekiConfigureServicesmetodu ile servislerin ya?am d?ng?s? ve implementasyonlar? kolayca yap?land?r?labilir.ITransientDependency,IScopedDependency,ISingletonDependencyaray?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.