Modüler Yapı Nedir: Faydaları ve Yaklaşım Biçimleri
Tags: androidappdevelopmen, modular, android, cleanarchitecture
Published: 2022-06-22 11:51:58

---
title: Modüler Yapı Nedir: Faydaları ve Yaklaşım Biçimleri
published: true
date: 2022-06-22 05:35:47 UTC
tags: androidappdevelopmen,modular,android,cleanarchitecture
canonical_url: 
---

![](https://cdn-images-1.medium.com/max/1024/0*eSh_a8yzfyfztsck.png)
_Build with Legos_

Selamlar 👋, bu makalede Modüler Yapı kavramına, neden ihtiyaç duyduğumuza, modüler yapının faydalarına, modüler yapı kurma yaklaşımlarına bakacağız. Hadi başlayalım. Keyifli okumalar ☕🍫🤗.

#### Modüler Yapı Nedir❓

Yazdığımız projelerimizi-uygulamalarımızı olabildiğince birbirinden bağımsız-izole olacak şekilde daha küçük alt parçalara, katmanlara ayırdığımız yapı olarak tanımlayabiliriz.

#### Modüler Yapıya Neden İhtiyaç Duyarız❓

Uygulamalarımız günden güne büyüyor. Sürekli yeni özellikler ekleniyor. Ve giderek projede çalışan geliştirici sayısı da artıyor. Bir yerden sonra yeni özellik eklemenin maliyeti artıyor. Bir değişiklik yapılacağı zaman başka bir geliştiricinin işi bekletilmek zorunda kalınabiliyor. Yapılan bir değişiklik birden fazla yeri etkileyebiliyor. Buda haliyle test süreçlerini uzatıyor, release’leri geciktiriyor. Projenin codebase’i büyüdükçe projenin build edilme süresi de giderek artıyor. Buda geliştiricinin verimliliğini düşürebiliyor.

Bunun gibi durumlardan dolayı kodlarımızı, feature’larımızı olabildiğince birbirinden bağımsız çalışacak katmanlar haline getirmeye ihtiyacımız oluyor. Bu sayede genel anlamda proje yönetimi kolaylaşıyor. Bir yerde yapılan değişiklik daha az yeri, geliştiriciyi etkiliyor. Build süreleri kısalıyor. Geliştiricilere siz şu şu modülden sorumlusunuz denilerek geliştiricilerin odaklanacağı asıl feature’lar belirlenebiliyor.

#### Modüler Yapının Faydaları Nelerdir❓

Genel olarak yukarıda paragrafta bahsettim aslında ama şimdi biraz daha başlık başlık değinelim 👊.

<iframe src="https://cdn.embedly.com/widgets/media.html?src=https%3A%2F%2Fgiphy.com%2Fembed%2Fl0JMrPWRQkTeg3jjO%2Ftwitter%2Fiframe&amp;display_name=Giphy&amp;url=https%3A%2F%2Fmedia.giphy.com%2Fmedia%2Fl0JMrPWRQkTeg3jjO%2Fgiphy.gif&amp;image=https%3A%2F%2Fi.giphy.com%2Fmedia%2Fl0JMrPWRQkTeg3jjO%2Fgiphy.gif&amp;key=a19fcc184b9711e1b4764040d3dc5c07&amp;type=text%2Fhtml&amp;schema=giphy" width="435" height="271" frameborder="0" scrolling="no"><a href="https://medium.com/media/e831d372549517830cd6c8f2bcbb2120/href">https://medium.com/media/e831d372549517830cd6c8f2bcbb2120/href</a></iframe>
#### **Ölçeklenebilirliği Artırma (**Scalability**)**

Uygulama büyüdükçe yeni ihtiyaçlar ortaya çıktıkça uygulamanın yönetimi zorlaşıyor. Projedeki geliştirici sayısı da artıyor. Bir yerden sonra bir feature geliştiren bir geliştirici başka bir geliştiriciyi bloklayabiliyor. Eklenecek özellik başka yerleri etkileyebiliyor. Bunu çözmek için proje küçük modüllere ayrılıp hangi developerların hangi modüller üzerinde geliştirme yapılacağı belirlenerek bu problem üstesinden gelinebilir.

Uygulama ayrı ayrı handle edilebilir hale gelmiş olacak. Seperation of Concern’ü artırmış olacak. Her şeyin ayrı testi, resource’ları olmuş olacak. Her geliştirici kendi alanına odaklanabilmiş olacak. Bu geliştiricinin verimliliğini de artıran bir etmen. Geliştiricilere yetkiler tanımlayarak her modüle erişmesi de engellenebilir.

#### Bakım Yapmayı Kolaylaştırma (Maintainability)

Uygulamada herhangi bir değişiklik yapılacağı zaman monolitik uygulamada büyük kod dosyaları, package’ları arasında kaybolmak yerine modüler yapıdaki bir uygulamada yapılacak iş ile ilgili modüle giderek daha az bir kod incelenir. Bu sayede projenin büyük bölümü taramak, anlamaya çalışmak ile uğraşmak yerine nispeten daha az kod ile uğraşılmış olur. Elde edilen hatanın tespit edilmesi ve bug’ların çözülmesi kolaylaşır, süresi kısalır. Eklenecek yeni özellik daha az yeri etkiler. Daha kolay eklenir.

#### Continuous Integration Sürecini Hızlandırma

Monolik bir uygulamada bir değişiklik yaptığınızda tüm testlerini koşturmanız gerekebilirken modüler bir uygulamada ise değişikliğin yapıldığı modül ve ilişkili yerlerin testlerinin koşulması yeterli olacaktır. Yapılan değişiklikten diğer modüller etkilenmez. Bu yüzden de diğer modüllerin testlerinin koşulmasına gerek kalmaz. Buda CI sürecimizi bir nebze olsun hızlandırır.

#### Daha Küçük Kurulum Dosyası (APK) Elde Etmeyi Sağlama

Modüler bir uygulamada Bundle ve Dynamic Features sayesinde daha küçük boyutlu kurulum dosyaları elde ederiz. Buda kullanıcılarımızın memnuniyetini attıran bir etmen.

#### Kodun Tekrar Kullanılabilirliğini Artırma

Uygulama modüler halde olduğunda, bir modül kolayca alınıp başka bir projeye aktarılabilir. Farklı projelerde kullanılan ortak componentlerin paylaşılabilmesini, belli başlı bazı modülleri build ederek bir codebase üzerinden farklı uygulamalar çıkarabilmeyi kolaylaştırır.

#### Daha Hızlı Compilation

Monolitik bir uygulamada A dosyasını değiştirdiğimizde tüm uygulama compile edilirken modüler bir uygulamada aynı dosyayı değiştirdiğimiz zaman o dosyanın içinde bulunduğu modül ve ilişkili yerler compile edilir. Bu da daha kısa süre de build almamızı sağlar.

<iframe src="https://cdn.embedly.com/widgets/media.html?src=https%3A%2F%2Fgiphy.com%2Fembed%2Ff7STAwvEml1eIf0FEq%2Ftwitter%2Fiframe&amp;display_name=Giphy&amp;url=https%3A%2F%2Fmedia.giphy.com%2Fmedia%2Ff7STAwvEml1eIf0FEq%2Fgiphy.gif&amp;image=https%3A%2F%2Fi.giphy.com%2Fmedia%2Ff7STAwvEml1eIf0FEq%2Fgiphy.gif&amp;key=a19fcc184b9711e1b4764040d3dc5c07&amp;type=text%2Fhtml&amp;schema=giphy" width="435" height="435" frameborder="0" scrolling="no"><a href="https://medium.com/media/4576792b77ad91d269bb854bcbf59c3d/href">https://medium.com/media/4576792b77ad91d269bb854bcbf59c3d/href</a></iframe>
#### Modüler Yapıyı Kurma Yaklaşımları

#### Katman Bazlı Modüler Yapı Yaklaşımı

Uygulamanın data, domain, presentation vb şekilde ayrı ayrı katmanlara ayırıp sonrasında bunları ayrı modül haline getiren yaklaşımdır. Katmanlar arası (ui-bussiness logic…) izolasyon ve güzel bir yapı (structure) sağlar. Bir modülde yapılan değişiklik diğer modülleri etkilemez. Bu sayede modüller bağımsız şekilde test edilebilir olur. Fena olmayan bir package hiyerarşisine sahip uygulamayı katmanlı modüler yapıya geçirmek biraz daha kolay olur.

#### Özellik (Feature) Bazlı Modüler Yapı Yaklaşımı

Uygulamada var olan özellikleri modül modül ayırma ve özellikleri birbirinden bağımsız hale getirme yaklaşımıdır. Bir özellikte yapılan bir değişiklik başka bir özelliği pek etkilemez. Bu sayede sadece ilgili modül ile ilgili testlerin koşulması yeterli olur.

Android bir projede sağladığı en büyük faydalardan bir tanesi _dynamic features_’ları kullanabilmektir. Bu sayede ihtiyaç oldukça bazı modüller indirilip kurulup kullanılabiliyor. Dolayısıyla uygulama ilk indirildiği zaman tüm özelliklerin büyük boyutlu bir apk ile indirilmesine gerek kalmıyor. Sadece kullanıcının sık kullanacağı özellikleri cihazında barındırması sağlanıyor. Bu da depolama ve mobil veri kullanımını iyileştiriyor.

Katmanlı mimariye göre implement edilmesi daha zordur.

![](https://cdn-images-1.medium.com/max/735/0*Q_eIrfEFtprmZS2g.jpg)
_Kaynak_

#### Hibrit Modüler Yapı Yaklaşımı

Katman Bazlı yaklşım ile Özellik Bazlı yaklaşımın birlikte harmanlanarak kullanılmasıdır. Örneğin; önce top level’da özellik bazlı modüler bir yaklaşımı implement edip sonrasında her bir özellik modülü içerisinde katman bazlı modüler yapı yaklaşımı uygulanır.

#### Son Sözler

Modülerizasyonun tek bir çözümü yok. Çeşitli seçeneklerimiz var. Ve bizde kendi projemizin durumlarına, ihtiyaçlarımıza göre hareket ederek karar vermeliyiz. Kısa zamandaki maliyetlerimize ve uzun dönemli olarak modülarizasyonun uygulamamıza getireceği faydaları göz önünde bulundurarak karar vermeliyiz. Monolitik yapıda bir uygulamamız varsa Katman Bazlı Modülerlik ile başlayabiliriz. Katman Bazlı Modülerliği oturttuktan sonra _Dynamic Delivery_’e ulaşmak istiyorsak Özellik Bazlı Modülerlik için kolları sıvayabiliriz.

![](https://cdn-images-1.medium.com/max/684/1*q5HEe6DWnljxg27Fe8eAJQ.png)

Bu makalede Modüler Yapı kavramını, faydalarını ve implement edilme yöntemlerini inceledik. Okuduğunuz için teşekkür ederim 👏. Umarım faydalı olmuştur. Görüşmek üzere, sağlıcakla kalın👋🤗.

![](https://cdn-images-1.medium.com/max/800/1*BQG_8GpS_3yedPUT2QKG_w.gif)
_Kaynak_

### Referanslar

- [Cengiz TORU - Software Engineer - Huawei | LinkedIn](https://www.linkedin.com/in/cengiztoru/)
- [cengiztoru - Overview](https://github.com/cengiztoru)

{% youtube aaNbG-xog3E %}

{% youtube PZBg5DIzNww %}

* * *