Android’te Clean Architecture Kullanımı

Hüseyin Serkan Özaydin
4 min readAug 25, 2020

--

Merhabalar, bugün ki yazımda size Android uygulama geliştirirken nasıl Clean Architecture yaklamışını uygulayacağınızdan bahsedeceğim. Neden yaklaşım dedim? Çünkü Clean Architecture konusu açıldığı zaman developerlardan “Evet ya güzel bir design pattern” gibi sözler duyuyorum.

Clean Architecture bir design pattern değil yaklaşım biçimidir

Neden yaklaşım biçimidir?

Çünkü, hazır mvc,mvvm,mvp,mvi, viper vb. yapıları daha fazla bölerek uygulayabileceğiniz bir yaklaşımdır. Özellikle model katmanını oldukça bölmeye çalışıyoruz bu yaklaşım ile ( Bu paragraf biraz kişisel görüşüm yanlış olduğunu düşünüyorsanız belirtmeniz durumunda burada değişiklikler yapabiliriz. )

Her zaman yaptığımız gibi bir şeyi kullanmadan önce onun ne olduğunu bilmemiz lazım :)

Nedir Clean Architecture?

Arkadaşlar Clean Architecture Android, IOS, Spring vb. frameworklerden bağımsız bir yaklaşım biçimidir. Yani bu yaklaşım biçimini herhangi bir dildeki herhangi bir projeye uygulayabilirsiniz.

Clean Architecture S.O.L.I.D presiplerini baz olarak ortaya atılmış bir yapıdır. Clean Architecture’nin 2 temel yapıtaşı presibi vardır;

  • Abstraction Principle
  • Dependency Rule

Bu iki prensibe bakmadan önce genel geçer Clean Architecture görselini paylaşayım

Abstraction Principle : Yukarıdaki çemberin merkezine gittikçe içine gidilen çember daha da soyutlaşır.

Dependency Rule : Bir çember ancak yanındaki çember ile bağımlı olabilir.

Clean Architecture Katmanları Nelerdir?

  • Presentation: Kullanıcı ile etkileşim halinde olan katman
  • Use cases: Kullanıcının yaptığı işlerin tanımlandığı katman. Örn: Kullanıcı listesini çekme
  • Domain: Logic işlemlerinin yapıldığı katman. Örn: mapleme vb.
  • Data: Soyut veri kaynağının tanımlandığı katman. Örn: Response modelleri
  • Framework: Kullandığınız SDK veya framework ile etkileşim halinde olan katman

Evet, Clean Architecture katmanları bunlar. Şurada bir net olalım ben gerçek dünya projelerinde hepsine ihtiyacımız olduğunu düşünmüyorum. Eğer projeleri bu kadar küçük parçalara ayırır isek ne proje yetişir nede yaptığımız işten zevk alırız bir yerden sonra bayar iş. Ama Clean Architecture felsefesini anladık ve temel prensiplerini biliyoruz S.O.L.I.D ne biliyoruz bunlardan yola çıkarak bu yapıyı biraz kendi projelerimize uyarlayabiliriz.

Not: Bundan sonra kendi projelerimizin ihtiyaçlarına bakarak ortaya çıkardığımız yapıyı kullanıyor olacağım. Şu ana kadar 3 farklı projede denedik ve bir sürü yapı denemiş bir ekip olarak bir sorun göremedik.

Madem gerekli bilgilendirmeyi ve uyarılarımızı yaptık koda geçelim !!!!

KOD

Projede amacımız şu; Bir servisimiz var ve bu serviste bulunan bir endpointden gelen cevabı kullanıcıya göstereceğiz;

Data Katmanı;

Bu katmanda bulunan klasörler şunlar;

  • api: Retrofit interfacenin bulunduğu klasör
  • entities: Backendten gelen responselerin bulunduğu klasör
  • repository: İstekte bulunmak için kullandığımız klasör ( Dikkat: Bu klasör repository implementationu içeriyor)

API:

Entities:

Repository:

Domain Katmanı;

Bu katmanda bulunan klasörler şunlar;

Not: Biz recylerview, activity, fragment veya benzeri bir UI elementinde Backendten gelen sınıfı kullanmıyoruz. Kendi oluşturduğumuz sınıfları kullanıyoruz.

  • entities: Ön tarafta kullanacağımız sınıfların bulunduğu klasör.
  • mapper: Backendten gelen sınıfları ile ön tarafta kullanacağımız sınıflara maplediğimiz klasör.
  • repository: İstekte bulunmak için kullandığımız klasör ( Dikkat: Bu klasör repository interfacesini içeriyor)
  • usecase: Kullanıcının presentationda yaptığı işlem sonucunda triggerlanan katman

Entities:

Mapper:

Repository:

Usecase:

Presentation Katmanı;

Burası bizim presented, viewmodel dediğimiz katman. Presenter direkt olarak usecaseye ulaşır.

Ön tarafta yani framework katmanında olan bir işlem presenterdaki “getWordyList” metodunu tetikler ve o da “wordyUseCase” de ki “getwordies” metodunu tetikler.

Burada gördüğünüz gibi oluşturduğumuz yapı bence Clean Architecture’ye ters düşmüyor ve tüm prensiplerini neredeyse karşılıyor. Ve yükü katmanlar arasında bölebiliyoruz

Benim Clean Architecture için anlatacaklarım bu kadar. Birkaç kaynak paylaşacağım;

Örnek proje linki:

Bir GDE’nin oluşturduğu yapı:

Clean Architecture yapısının anlatıldığı bir kaynak:

Bizim geliştirdiğimiz anlattığımız Clean Architecture yapısını içeren kod generator:

Son 1 sene ekip olarak projelerimizi nasıl daha hızlı ve temiz çıkarırız diye araştırmalar MVP’ler yapıyoruz. Bunlar sonucunda böyle bir yapı çıktı ortaya. Daha iyi olacaktır eminim.

--

--