Flutter Feature First Klasör Yapısı

4 min readApr 30, 2025

Merhaba değerli okurlar, bu yazımda klasör yapı felsefelerinden biri olan Feature First yapısı ve Flutter projemizde kullanımı üzerine konuşuyor olacağız. Sözü uzatmadan başlayalım

Klasör Yapısı

Klasör yapısı, bir yazılım projesindeki kod dosyalarının, varlıkların (assets), testlerin ve diğer kaynakların mantıksal ve hiyerarşik olarak düzenlenmesi yöntemidir. Tıpkı bir kütüphanedeki kitapların konularına göre raflara ayrılması gibi, kodlarımızı da işlevlerine, türlerine veya ait oldukları özelliklere göre klasörler altında gruplandırırız. Bu sayede dosyaları kolayca bulabilir, hangi dosyanın nereye ait olduğunu anlayabiliriz.

Elbette bunun için elimizde iyi bir klasör yapısının bulunması gerekiyor. Özellikle yazılım projelerinde kod tabanını anlayabilmek ve anlamlandırabilmek adına iyi bir klasör yapısı önem arz eder.

Klasör yapısının önemsenmemesi küçük projeler için çok fazla tehlike arz etmesede büyük ya da zamanla büyüyen projeler için ciddi sorunlara yol açabilir.

  • Yavaş Geliştirme: Sürekli dosya aramakla vakit kaybedilir.
  • Artan Hata Riski: Yanlış dosyayı değiştirmek veya bağımlılıkları gözden kaçırmak kolaylaşır.
  • Zor Ölçeklenme: Yeni özellikler eklemek mevcut yapıyı bozma riski taşır.
  • Kabus Gibi Bakım: Küçük bir değişiklik bile büyük bir efora dönüşebilir.
  • Ekip İçi Sürtüşme: Standartların olmaması kafa karışıklığına ve verimsizliğe neden olur.

Kısacası, iyi bir klasör yapısı, projenizin sadece bugününü değil, geleceğini de kurtarır. İşte bu yüzden, bu rehberde modern Flutter projelerinde altın standart haline gelen Feature-First (Özellik Odaklı) yaklaşımını konuşuyor olacağız

Feature First Nedir?

Uygulamanızı teknik katmanlara (ui, data) göre değil, kullanıcıya sunduğu özelliklere (auth, home, profile) göre organize etmektir. Her özellikle ilgili her şey (ekran, mantık, veri) kendi özel kutusunda durur. Bu durum bize şu avantajları kazandırır;

  • Yüksek Birliktelik (High Cohesion): Bir özellikle ilgili tüm kod parçaları mantıksal olarak bir aradadır. Bu, o özellik üzerinde çalışmayı çok daha kolaylaştırır.
  • Düşük Bağımlılık (Low Coupling): Özellikler arasındaki bağımlılıklar minimumda tutulur ve genellikle merkezi bir core veya shared katmanı üzerinden yönetilir. Bu, bir özellikte yapılan değişikliğin diğerlerini kırma olasılığını azaltır.
  • Gelişmiş Modülerlik: Her özellik kendi kendine yeten bir birim gibidir. Bu, özellikleri eklemeyi, çıkarmayı veya üzerinde paralel çalışmayı kolaylaştırır.
  • Artırılmış Ölçeklenebilirlik: Projeye yeni özellikler eklendikçe, mevcut yapı bozulmadan genişler.

Genel olarak Feature First yapısı dışarıdan bakıldığında iki ana başlık altında toplanır;
Feature ve Core. Hadi gelin bu klasörlerin görevlerine bakalım.

core/ Klasörünün Amacı:

Ne İçerir?

  • Bu klasör, projenizdeki birden fazla özellik (feature) tarafından paylaşılan, genel amaçlı ve yeniden kullanılabilir tüm kodları barındırır. Uygulamanın temel yapı taşları, genel ayarları ve ortak araçları buradadır.
  • Örnekler: Tema tanımları (config/theme), uygulama sabitleri (constants), genel hata sınıfları (errors), navigasyon altyapısı (navigation), ana API istemcisi (network), tüm projede kullanılabilen widget’lar, genel yardımcı fonksiyonlar (utils), loglama veya analiz gibi genel servisler.

Neden Var?

  • Kod Tekrarını Önlemek (DRY): Aynı kodun farklı özelliklerde tekrar yazılmasını engeller.
  • Tutarlılık Sağlamak: Uygulama genelinde ortak bir görünüm, his ve davranış standardı oluşturur (örn: tüm butonlar aynı stilde).
  • Merkezi Yönetim: Genel ayarlar veya araçlar tek bir yerden yönetilir.
  • Kural: features klasörleri core içindeki kodlara bağımlı olabilir, ancak core klasörü asla features içindeki bir koda bağlı olmamalıdır. core, projenin en iç ve temel katmanıdır.

features/ Klasörünün Amacı:

Ne İçerir?

  • Bu klasör, uygulamanızın ana işlevsel bölümlerini, yani kullanıcıya sunduğunuz farklı özellikleri veya modülleri içerir. Her bir alt klasör (örn: auth, home, settings) uygulamanın belirli bir bölümünü temsil eder.
  • Örnekler: Kullanıcı girişi/kayıt (auth), ana akış/haber kaynağı (home), kullanıcı profili yönetimi (profile), ürün detayları (product_details), alışveriş sepeti (cart), ayarlar (settings).

Neden Var?

  • Modülerlik: Uygulamayı bağımsız veya yarı bağımsız parçalara ayırır. Bu, farklı ekiplerin farklı özellikler üzerinde çalışmasını veya bir özelliğin daha kolay eklenip çıkarılmasını sağlar.
  • Odaklanma (Cohesion): Bir özellikle ilgili tüm kodlar (UI, state yönetimi, veri erişimi, iş mantığı) kendi klasörü içinde bulunur. Bu, o özellik üzerinde çalışırken bağlamı kaybetmemenizi sağlar.
  • Düşük Bağımlılık (Coupling): Özellikler arasındaki doğrudan bağımlılık minimumda tutulur. Bir özellikte yapılan büyük bir değişiklik, diğer özellikleri kırma riskini azaltır. İdeal olarak, özellikler birbirleriyle doğrudan konuşmazlar; gerekirse core üzerinden haberleşirler.
  • Kural: Bir features alt klasörü (auth gibi) sadece core’a ve kendi içindeki dosyalara bağımlı olmalıdır. Başka bir features alt klasörüne (home gibi) doğrudan bağımlı olmamalıdır.

Umarım bu bilgiler Feature First yapısı hakkında sizler için bilgilendirici olmuştur. Feature First yapısını bir diğer klasör yapısı olan Layer Based ile kıyaslayalım;

Küçük ve basit projeler için Layer-Based yeterli olabilir. Ancak orta ve büyük ölçekli, büyümesi beklenen, uzun ömürlü veya takım olarak geliştirilen projeler için Feature-First, sunduğu modülerlik, ölçeklenebilirlik ve bakım kolaylığı avantajlarıyla genellikle daha üstün bir yaklaşımdır.

State Management İle Kullanımı

Aklınızda state management ile kullanımı ya da uyarlaması konusunda soru işaretleri olabilir; Bu yapı, seçtiğiniz state management çözümü ne olursa olsun esneklik sunar ve projenizin zamanla büyümesine olanak tanır. İster GetX ister Provider istersenizde Bloc kullanın bu yapıyı oluşturup, state management yönetiminize göre şekillendirebilirsiniz.

Unutmayın, “tek doğru” klasör yapısı yoktur. En iyi yapı, projenizin ihtiyaçlarına, boyutuna ve ekibinizin dinamiklerine uygun olandır. Ancak Feature-First, modern uygulama geliştirmede kendini kanıtlamış, ölçeklenebilirliği ve bakımı kolaylaştıran sağlam bir temel sunar.

Bu yazımda Flutter tarafında Feature First klasör yapısı hakkında bilgi vermeye çalıştım. Umarım ilgilisi için faydalı olur.

Github: www.github.com/abdullah017
Linkedin: www.linkedin.com/in/abdullahtas
Stackoverflow:
https://stackoverflow.com/users/13807726/abdullah-t

--

--

AbdullahTaş
AbdullahTaş

Written by AbdullahTaş

FLUTTER DEVELOPER || GRAPHQL - FIREBASE

No responses yet