ABP FRAMEWORK

Esra YAŞIN
3 min readNov 12, 2023

--

Merhabalar; uzun zamandır merak ettiğim Abp Framework’ü araştırma ve proje geliştirme şansım oldu. Edindiğim bilgiler doğrultusunda adım adım abp framework ile bir proje nasıl geliştirilir anlatacağım.Avantajlarını ve Dezavantajlarını birlikte birlikte değerlendirelim.

ABP Framework; Volosoft tarafından geliştirilmiş Open Source bir frameworktür.

Best practice uygun DDD kalıbıyla pek çok hazır modül sunmaktadır. Kullanıcı girişi, Rol yönetimi gibi sisteminizin ihtiyacı olan genel modüller hazır olarak geliyor. Authorization, UnitOfWork gibi Cross Cutting Cuncerns’lerin otomatik gelmesi proje geliştirme süremizi hızlandırır.

Avantajları:

  • Sürdürülebilir kod yazmamızı sağlayarak kod tekrarının önüne geçmemizi sağlar.
  • Güvenlidir ve Clean kod yazmamızı sağlar. Bu da düşük bakım maliyetili, yüksek kaliteli, kolay okunabilir ve ölçeklenebilir proje demektir.
  • Authorizasyon işlemleri hazır geldiği için zaman kazanmamızı sağlar.
  • Proje oluştururken ihtiyacımız olan temel yapıları hazır getirdiği için hızlı proje çıkarmamızı sağlar.Böylece mimari modeliyle zaman kaybedilmemiş olur.
  • Her yazılımda işimize yarayacak birçok genişletme metodu ve yardımcı sınıf gibi yapılar mevcuttur.Uygulama genelinde kullanılacak olan yapılar olarak bildiğimiz Cross Cutting Concern’ler yani Exception Handling ,Authorization, Validation, Dependency Injection, Repository, Logging ,Mapping gibi yapılar hazır olarak gelir. Ve bizi her proje için tekrar tekrar oluşturmaktan kurtarır, hızlı proje çıkarmamızı sağlar.

Dezavantajları:

  • Nesne yönelimli dil temellerine hakim olmayan, Model View Controller gibi şablonlarda çalışmamış kişiler için ABP mimarisini düzenlemek zor olabilir.
  • ORM yapıları kullanıldığından ve belli hazır yapılardan gidildiği için programlama bilginizin körelmesine sebep olabilir.

Ama bu durum avantaja çekilebilir elbette ; mimari yapıyı inceleyerek nasıl ele alındığını anlamaya çalışmak faydalı olacaktır.

Programlama dillerine, OOP ve mimarilere ne kadar hakim olursanız ABP Frameworkede o kadar müdahele edebilirsiniz.

ABP frameworkün sitesinden dökümantasyonu takip ederek de projenizi oluşturabilirsiniz.

Öncelikle ABP CLI’yı yüklüyoruz; cmd komut ekranında aşagıdaki kod çalıştırılır.

dotnet tool install -g Volo.Abp.Cli

ABP CLI komut satırı ile ABP şablonlarına göre Proje oluşturulur ve ABP paketleri güncellenir. Projemize “ McApp” ismi verilerek aşağıdaki kod satırı yazılır. Siz kendi proje isminizle de oluşturabilirsiniz

abp new  McApp -csf

Projemiz oluştu, Visual Studio Idesinde açabiliriz.Projenin terminalinde aşağıdaki kodu çalıştılarak veritabanı oluşturulur.

dotnet run --migrate-database

Projemiz geliştirmeye hazır, yeni Enitity nesneleri ekleyebilir ve ve iş modeline uygun servisleri entegre edebiliriz.

Domain katmanına entityleri oluşturuken isimlendirmede sonuna Item ekliyoruz. TodoItem, OurServiceItem gibi

ABP Frameworkün oluşturduğu klasörler

linkinden adımları takip ederek entitylerinizi ve servislerinizi ekleyebilirsiniz. Unutmayın buradaki yapıya uymalısınız

ABP Framework de “Tenant” kavramı , uygulamada birbirinden bağımsız çalışabilen, ayrı veri tabanlarına ve konfigürasyonlara sahip olan birimlerdir. “TenantId” ise hangi Tenanta ait olduğunu belirtmek için kullanılır. Örneğin; aynı veritabanı ve uygulama her müşterinin sadece kendi datalarını görmesini sağlar. Bir Tenant oluşturulduğunda o Tenantın dataları , yetkileri, kullanıcıları ayrı oluyor. Abp Framework bize bu MultiTenant yapısınıda sunuyor.

public class OurServiceItem : BasicAggregateRoot<Guid>, IMultiTenant
{
public string Name { get; set; }
public string PriceOf { get; set; }
public Guid ParentId { get; set; }
public Guid? TenantId { get; set; }
}

IOurServiceAppService arayüzünü (interface), CRUD işlemlerini gerçekleştirmek için oluşturuldu. Interface oluştururken sayfalama,create,update işlemleri gibi hazır yapılar inherit edilir.

public interface IOurServiceAppService : ICrudAppService< 
OurServiceDto, Guid,
PagedAndSortedResultRequestDto,
CreateUpdateOurServiceDto>
{

}
    public class OurServiceAppService : CrudAppService<
OurServiceItem,OurServiceDto,
Guid,PagedAndSortedResultRequestDto,
CreateUpdateOurServiceDto>, IOurServiceAppService
{
public OurServiceAppService(IRepository<OurServiceItem, Guid> repository) : base(repository)
{
}
}

Projenin devamına Github repomdan bakabilirsiniz.

Makalem ve ABP frameworkü hakkındaki yorumlarınızı merak ediyorum.İyi çalışmalar.

--

--