Onion Architecture Nedir?
Onion(soğan) mimarisi 2008 yılında Jeffrey Palermo tarafıdan tasarlanmıştır, amaç gevşek bağlı(loosely coupled) uygulamalar geliştirmek ve bu sayede değişen ihtiyaçlara göre uygulamada değişiklik yapmak için sıfırdan başlamadan minimum maliyetle uygulamayı geliştirebilmektir. Hadi bu mimariyi anlatan aşağıdaki fotoğrafa bakıp, öyle devam edelim:
Gördüğünüz gibi fotoğrafta soğanı andırıyor :) Peki bu bize ne anlatıyor? bu mimari 3 temel kısımdan oluşuyor bunlar Core, Infrastructure ve Presentation.
Core katmanı merkez katmandır. Burada genelde Domain ve application isimli iki alt katman bulunur. projedeki veri tabanı Entityleri Domain altında, Repository ve Service interfaceleri ise Application altında tutulur. yukarıdaki resimde de görebileceğimiz gibi en iç katman domain ve sonra Repository ve Service interface katmanları var. Bu interfaceler bizim Core altındaki Application katmanında yazılırlar.
Infrastructure katmanı ise Application interfacelerinin implemente edildiği yerdir. Burası dış servislerin(external) projeye dahil edildiği katmandır.
Örneğin projedeki Database external’dır yani bir dış servistir ve değişebilir. Infrastructure aktmanında veritabanı konfigürasyonu(Migration, seed), repository ve service interfacelerinin yani application katmanı interfaceleri implemente edilir. Bu sayede dış servislerde yapılan bir değişiklikte(MSSQL’den Oracle’a geçiş gibi veya kullanılan SMS servisin mail servisle değiştirilmesi) Core’da hiçbir değişiklik yapılması gerekmez.
Peki bu bize tam olarak ne sağlıyor diye sorduğunuzu duyar gibiyim. Bu durum bize biraz önce dediğimiz gibi aslında gevşek bağlılığı sağlıyor. External olan Database değiştiğinde sadece gidip ayrı bir katmanda tutulan yani persistence katmanında bulunan database implementasyonu için değişliklik yaparız. Ve bu projenin Core yani merkez katmanında hiçbir değişiklik yapmamızı gerektirmez. Core bu sayede aynı kalır. Onion Architecture hakkında Anlattıklarım bu şekilde bir temel oluşturmuştur. Ama katmanlar arası ilişkiyi daha iyi anlatmak adına bir proje örneği verip katmanları görselleştirmek çok daha iyi olacaktır. Bunun için şuan geliştirdiğim bir projeden faydalanacağım, eğer incelemek isterseniz linki makalenin sonunda bulabilirsiniz.
Burada gördüğümüz gibi Core altında iki alt katman bulunuyor Application ve Domain. Infrastructure altındaysa persistence. Burada repository interfacelerimiz Core.Applcation da tutulurken Infrastructure katmanında da implementasyonu ve diğer database operasyonları konfigure edilmiş ve interfaceleri implemente edilmiştir.
Presentation katmanımız ise uygulamanın kullanıcıya iletişiminin sağlandığı katmandır. Bu bir Web Api, Mvc veya Console app olabilir.
Özet geçecek olursak Core’da domain modellerimizi ve diğer repository/service interfacelerimiz bulunur, Infrastructure’da bunların implementasyonu gerçekleşir ve Presentation katmanında ise kullanıcı ile iletişime geçer.
Onion Architecture ile yazılmış proje incelemek isterseniz, buradan erişip inceleyebilirsiniz, beğenirseniz yıldız bırakmayı unutmayın :)
Ben yazarken çok şey öğreniyorum, umarım sizin içinde faydalı olmuştur. Eğer beğendiyseniz takip etmeyi unutmayın, beraber öğrenmeye devam edelim. Yakın zamanda tekrar görüşmek üzere :)