BMPortfolio
Back to all articles

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

12 views
Cover for Onion Architecture Nedir? Katmanlı Mimari ile Arasındaki Farklar

                                                                                                     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