English
ABP Framework

ABP Framework: Multi-Tenant SaaS'ta Tekerleği Yeniden İcat Etmemek

Tenant ve izin yönetimini sıfırdan yazmak yerine hazır yapı taşı kullanmak.

· Full Stack Developer · Güncellendi:

Her yeni multi-tenant projede tenant yönetimini, izin sistemini ve kullanıcı-rol altyapısını sıfırdan kurmak zaman kaybı. ABP Framework tam olarak bunun için var: .NET üzerinde çalışan, Domain-Driven Design prensiplerini temel alan açık kaynaklı bir framework ve bu tekrar eden parçaları hazır modüller olarak sunuyor.

ARCA'da çalıştığım kurumsal, çok kiracılı SaaS platformlarının mimarisinde ABP'yi bu yüzden tercih ediyoruz: modüler uygulama altyapısı, tenant ayrımı ve izin yönetimi gibi tekrar eden parçaları her seferinde yeniden kurmak yerine framework'ün sağladığı yapı taşları üzerinden ilerliyoruz. Bir tenant'ın diğerinin verisini görmemesi, kullanıcı rollerine göre ekranların ve aksiyonların açılıp kapanması gibi konular her SaaS projesinde tekrar eden işler; bunları sıfırdan kurmak yerine framework'ün üzerine kendi iş mantığımızı ekliyoruz.

Bunu sihirli bir değnek gibi anlatmak istemiyorum; domain katmanını sen tasarlıyorsun, CQRS handler'larını sen yazıyorsun, iş kurallarının doğruluğu yine sana bağlı. ABP'nin verdiği şey, tenant ve izin gibi hemen her multi-tenant projede tekrar eden altyapıyı baştan kurma yükünü azaltması.

Bazı projelerde en değerli kazanım yeni bir özellik değil, tekrar etmen gereken işi bir kere yapıp bir kenara koyabilmen oluyor.

ABP'nin altyapısında dikkat çeken bir mekanik, application service dediğin sıradan bir C# sınıfını, elle bir controller yazmadan otomatik olarak REST API'ye çevirmesi; conventional routing üzerinden bu servisi doğrudan HTTP endpoint'i olarak sunuyor. Aynı şekilde soft-delete, auditing (kim ne zaman değiştirdi) ve data filtering gibi cross-cutting concern'ler de framework seviyesinde interceptor'larla otomatik uygulanıyor; entity'ye bir interface eklemen çoğu zaman yetiyor, ayrı bir kod yazmana gerek kalmıyor.

ABP'nin modüler yapısı bedavaya gelmiyor; framework kendi konvansiyonlarını (belirli klasör yapısı, kendi DbContext yönetimi, kendi authorization sistemi) dayatıyor ve bunları öğrenmek başlı başına bir maliyet. Tek kiracılı, küçük ölçekli bir projede ya da ekip DDD'ye hiç aşina değilse ABP'yi kurmak, kazandıracağından fazla zaman yiyebilir; bu durumda daha ince, kendi yazdığın bir tenant çözümü çoğu zaman daha az sürpriz çıkarıyor.