Software Architecture
Onion Architecture Nedir? Katmanlı Mimari ile Arasındaki Farklar
Onion Architecture nedir, klasik katmanlı mimariden farkları nelerdir ve Domain, Application, Persistence, Infrastructure ve Presentation katmanları nasıl çalışır? Bu yazıda Onion Architecture yapısını, bağımlılık yönünü ve katmanların sorumluluklarını örneklerle incelicez

ONION ARCHITECTURE – KATMANLI
MİMARİ İLE ARASINDAKİ FARK
ÇOK KATMANLI MİMARİ
1.
Dış dünyadan gelen istek ilk önce PL dediğimiz
katmana gider. (PL (Presentation Layer) = sunum katmanı)
2.
PL bu isteği alır ve bunu BL katmanına iletir. (BL
(Business Layer) = iş katmanı. Yani algoritmaların olduğu, servislerin
bulunduğu katmandır.)
3.
BL bu isteği alır ve DAL katmanına iletir. (DAL
(Data Access Layer) = veritabanına bağlanan katman)
Neden Onion Architecture, Katmanlı Mimariye Tercih
Ediliyor? (Katmanlı Mimarinin Dezavantajları)
·
Katmanlar arası sıkı bağımlılık vardır. Yani PL
direkt BL’ye; BL direkt DAL katmanına bağlanıyor. Arada bir abstraction yoktur.
Örneğin ben DAL katmanında bir kodu değiştirmem gerektiğinde mecburen BL’de de
değiştirmem gerekecek. Çünkü BL, DAL katmanına sıkı bağımlıdır
·
Data katmanı yani DAL katmanı merkezidir. Böylece
uygulama tasarımlarında verinin geliş tarzına bir bağımlılık oluşmaktadır. Böylece
eğer ki veritabanı değişirse çok fazla değişiklik yapmamız gerekir bu da yüksek
maliyet oluşturur
ONION ARCHITECTURE
DOMAIN KATMANI
·
Domain katmanı, onion architecture’ın merkezi
katmanıdır.
·
Domain katmanına farklı isimler verilebilir. Domain
= Core = Entities
·
Bu katmanda neler bulunur?
o
Entities, value object’ler, enum, entity ile
alakalı olan exception’lar
REPOSITORY & SERVICE INTERFACE Katmanı / Core Katmanı
Not: bu servisin ismine uygulama tasarlama sürecinde APPLICATION diye yazılır
·
Domain ile iş katmanı arasındaki (Infrastructure
ya da Persistence) soyutlama katmanıdır. Yani bu katmanda interface lerimizi
yazarız
·
Bu katman yani R&S Interface katmanı domain
katmanını referans eder
·
Bu katmanın amacı Loose Coupling (gevşek
bağlılık) sağlamaktır
·
Bu katmanda neler bulunur?
o
Tüm servislerin interface’leri bu katmanda tanımlanır.
(IRepository, IxService)
o
DTO, ViewModel, Interface, Mapping operasyonları
(yani bir nesneyi başka bir nesneye dönüştürmek), Validasyonlar, CQRS design
pattern.
PERSISTENCE KATMANI
·
Veritabanı ile ilgili işleri yapan katmandır
·
Application (repository & service interface)
katmanındaki veritabanı ile ilgili olan interface lerin concrete’leri persistence
katmanında tanımlanır
·
DbContext, Migrations, Veritabanı ile ilgili
configurasyonlarımız (connectionString), seeding data’larımız bu katmanda
yapılır
INFRASTRUCTURE Katmanı
·
Application katmanındaki veritabanı dışındaki
interface’lerin concrete’leri bu sınıfta tanımlanır. Yani biz veritabanı ile
ilgili bir interface varsa bunun concrete’ini persistence katmanında
tanımlarken; veritabanı dışındaki interface’lerin concrete’leri Infrastructure
katmanında tanımlanır
·
Veritabanından olan veri erişimi dışındaki bütün
servisler bu katmanda inşa edilir
·
Email servisi, SMS servis, Notification, Payment
Servisi. (bu servislerin hepsi veritabanından bağımsız servislerdir)
PRESENTATION KATMANI
·
Kullanıcının client ile yani uygulamayla
iletişime geçtiği katmandır.
·
Web Application, MVC, Web API, Angular gibi
uygulamalar bu katmanda bulunur
ONION ARCHITECTURE UYGULAMADAKİ İNŞAASI
Yani burada
--Presentation katmanı, Infrastructure Katmanı, Persistence
katmanı à
application katmanını referans edecek
--Application Katmanı à
Domain katmanını referans edecek
ÖZET: (KATMANLARDA NELER BULUNUR)
1.
Domain katmanı:
o
Entities
o
Value
Objects
o
Enum
o
Exceptions (entity ile alakalı olan exceptions)
2.
Application Katmanı:
o
bütün Interface’ler
o
DTO
o
ViewModel
o
Mapping
o
Validasyonlar
o
CQRS
pattern
3.
Persistence Katmanı:
o
application katmanında tanımlanan interface’lerden
VERİTABANI ile ilgili olanların Concrete’leri. Yani kısaca veritabanı ile
alakalı interface’lerin concrete’leri
o
DbContext
o
Migration
o
ConnectionString
4.
Infrastructure Katmanı:
o
Application katmanında tanımlanan veritabanı
dışındaki interface’lerin concrete’leri bu katmanda tanımlanır
o
Veritabanı erişimi dışındaki tüm servisler
o
Email Service
o
SMS Service
o
Notification
o
Payment
5.
Presentation Katmanı
o
Web Application
o
Web API
o
MVC
o Angular