Türkçe

Temel Özellikleri

⭐N-Tier Mimaride ki karşılaşılan sorunlara çözüm yaratmak için 2008 yılında Jeffrey Palermo tarafından ortaya atıldı.

⚡Loose Coupling ilkelerine ve Seperation of Concerns prensiplerine uygundur.

✅Onion Architecture’un asıl amacı Clean Architecture prensiplerini uygulamaktır.

🔂Birim testler, katmanlara ayrılarak daha iyi bir şekilde yapılabilir.


Avantajları

👌İşlevsellik ve tasarım bir arada düşünülür, bu sayede daha iyi bir yazılım mimarisi oluşur.

✅ İç katmanlar diğer katmanlara bağımlıdır, bu sayede değişikliklerin yayılması azaltılır ve daha az etkilenir.

🙆 Sistem büyüdükçe ve değiştikçe daha esnektir ve kolayca genişletilebilir.

Dezavantajları

😕 Katmanlar arası iletişim ve veri akışı daha zor olabilir.

👷Geliştirme süreci daha uzun sürebilir ve daha fazla çalışma gerektirebilir.


N-Tier Architecture ile Farkları

N-TIER ARCHITECTURE

❗Yukarıda N-Tier Mimari şemasında görülmektedir ki tüm katmanlar birbirine sıkı sıkıya bağlıdır. Bir hiyerarşi söz konusudur.

❗Uygulama tasarımında veri ve verisel dönüşümler ciddi problemlere yol açmakta ve merkezi pozisyonda olmasından dolayı uygulamada veriye ve verinin geliş tarzına bir bağımlılık oluşturmaktadır. Bu da süreçte veri erişim mantığının değişmesi ihtiyacında yüksek maliyet olarak karşımıza çıkmaktadır.

Onion Architecture

♻️ Yukarıda Onion mimarisinin şeması vardır. Bu şemada da görüldüğü üzere içe doğru bir bağlılık vardır.

❗️Bu mimaride yapılan herhangi bir değişiklik içe doğru bağımlılık yaratmazken, dışa doğru yaratır.


Katmanları

Domain Entities Katmanı (Core Katmanı)

Merkez katmandır. Domain ve veritabanı bu katmanda tutulur.

  • Entities: Veritabanlarındaki tabloları temsil eder.
  • Value Object: Immutable (değişmez) olan nesneler.
  • Enumeration: Enum veriler.
  • Exception: Domain için oluşturulan exception sınıfı.

Repository & Service Interface (Core Katmanı)

Domain katmanı ile uygulamanın business/service katmanı arasında bir soyutlama görevi görür. Repository ve service’in tüm interfaceleri burada yazılır. Domain katmanını referans alır.

  • Custom Exception: Kişiselleştirilmiş exception sınıflarıdır.
  • Response Object
  • Request Parameters Object
  • DTO Objects: Domaindeki entitylere doğrudan erişimi engelleyecek objeler.
  • ViewModels Objects
  • Interfaces(Repository, UnitOfWork)
  • Mapping:
  • Validators

Onion architecture’da Repository ve Service Interfaces katmanlarına bütün olarak APPLICATION KATMANI denir.

Aynı Şekilde Domain ve Application katmanlarının tümüne de CORE KATMANI denir.

Persistence Katmanı

Veritabanı konfigürasyon işlemlerinin gerçekleştirildiği katman.

  • DbContext: Veritabanımızla uygulamamız arasında sorgulama, güncelleme, silme gibi işlemleri yapmamız için olanak sağlar.
  • Migrations: Kod kısmında oluşturulan tabloların veritabanına kaydedilme işlemi.
  • Configurations
  • Seeding
  • Interface Implementation

En dışta bulunan katman olduğu için bu katmana herhangi bir katman bağımlılık göstermeyecektir.

Onion Architecture’da, geleneksel mimarinin aksine veri katmanı(Persistence Katmanı) en iç katman olarak değil, en dış katman olarak belirlenmiştir. Böylece uygulamada verinin nerden geldiğinden bağımsız olarak geliştirme yapılabilmektedir.

Infrastructure Katmanı

Bu katmanda ise sisteme eklenecek external şeyler bulunur. Bu katmana hiçbir katmanın bağlılığı olmamalıdır.

  • Email / SMS
  • System Clock
  • Notification

Presentation Katmanı

Bu katman sunum katmanıdır. Bu katmanda mantıksal işler olmaz. Kullanıcının uygulama ile iletişime geçtiği katmandır.

  • Console App
  • Web App
  • Web API
  • MVC

Dosya Yapısı

Onion Architecture ile geliştirlecek uygulamanın ideal düzeni.
0
0
0
0