Atomic Design Patern: React Uygulaması Yapılandırma

Selim KURT
4 min readJun 27, 2024

--

React ile ölçeklenebilir uygulamalar inşa ederken, bileşen yapılarını yönetmenin zorluklarıyla sıkça karşılaşırız. Atomic Design Patern, uygulamaları organize etme ve yapılandırma konusunda güçlü bir metodoloji olarak ortaya çıkmıştır. Kimyadan ilham alan bu desen, arayüzleri temel yapı taşlarına ayırarak, daha modüler ve ölçeklenebilir bir yaklaşımı teşvik eder. Uygulama kodumuzun okunabilirliğini, sürdürülebilirliğini ve esnekliğini artıran güçlü bir metodoloji sunar.

Atomic Design Patern, Brad Frost ve Dave Olsen tarafından tanıtılmış olup, bir tasarım sisteminin en küçük parçalarına ayrılması gerektiği fikrine dayanır. Bu küçük parçalar daha sonra giderek daha karmaşık ve yeniden kullanılabilir bileşenler oluşturmak için kullanılır. Amaç, katı bir hiyerarşi yaratmak değil, daha iyi anlamak ve kullanıcı arayüzleri oluşturmak için bir zihinsel model sunmaktır.

Atomic Design Metodolojisi

Atomic Design metodolojisi tasarımı beş farklı seviyeye ayırır:

Atomlar: Uygulamanızın temel yapı taşlarıdır, örneğin bir buton, bir giriş alanı veya bir form etiketi. React’te, bunlar bireysel bileşenler olarak temsil edilir. Kendi başlarına tam olarak kullanışlı olmasalar da, daha karmaşık bileşenler oluşturmak için temeldirler.

Moleküller: Atomların bir araya gelerek işlevsel bir birim oluşturduğu gruplardır. Örneğin, bir form; etiketler, giriş alanları ve bir gönder düğmesi gibi atomları içeren bir molekül olabilir.

Organizmalar: Moleküller ve/veya atom gruplarından oluşan nispeten karmaşık UI bileşenleridir. Bunlar, bir başlık, altbilgi veya navigasyon çubuğu gibi arayüzün daha büyük bölümleridir ve bu nedenle kendi durum ve işlevselliklerine sahip olabilirler.

Şablonlar: Bileşenleri bir düzen içine yerleştirip, tasarımın temel içerik yapısını ifade eden sayfa düzeyindeki nesnelerdir. Genellikle organizmalar gruplarından oluşurlar ve tam bir düzeni temsil ederler.

Sayfalar: Gerçek temsil edici içerik ile şablonların nasıl göründüğünü gösteren spesifik örneklerdir. Bu sayfalar, farklı şablonların rendere edilmiş halini sergileyen ekosistemlerdir. Birden fazla ekosistem bir araya gelerek tüm uygulamayı oluşturur.

Atomic Design’i React Uygulamalarında Kullanmak

Atomic Design’i React uygulamalarında uygulamak için şu önemli noktaları göz önünde bulundurabiliriz:

  1. Bileşen Kategorilendirmesi: Bileşenleri atomlar, moleküller, organizmalar, şablonlar ve sayfalar olarak organize edin. Bu kategorilendirme, projenizin dosya yapısında da yansıtılmalıdır.
  2. Durum Yönetimi: Durumun bileşenlerin farklı seviyelerinde nasıl yönetileceğine karar vermek de önemlidir. Atomlar ve moleküller durum tutmazken, organizmalar ve şablonlar duruma ihtiyaç duyabilir.
  3. Dokümantasyon: Her bileşenin ve kullanımının kapsamlı dokümantasyonu son derece önemlidir. Bu, Storybook gibi araçlar ile kolaylaştırılabilir, bu sayede yaşayan bir stil rehberi oluşturabiliriz.

Basit Bir Örnek

import React from 'react';

const noop = () => {};

// Atomlar
const Button = ({ onClick, children, type }) => <button type={type} onClick={onClick}>{children}</button>;
const Label = ({ htmlFor, children }) => <label htmlFor={htmlFor}>{children}</label>;
const Input = ({ id, type, onChange, value = "" }) => <input id={id} type={type} onChange={onChange} value={value} />;
const Search = ({ onChange }) => <input type="search" onChange={onChange} />;
const NavMenu = ({ items }) => <ul>{items.map((item) => <li>{item}</li>)}</ul>;

// Moleküller
const Form = ({ onSubmit }) => (
<form onSubmit={onSubmit}>
<Label htmlFor="email">Email:</Label>
<Input id="email" type="email" onChange={noop} />
<Button type="submit" onClick={noop}>Submit</Button>
</form>
);

// Organizmalar
const Header = () => (
<header>
<Search onChange={noop} />
<NavMenu items={[]} />
</header>
);

const Content = ({ children }) => (
<main>
{children}
<Form onSubmit={noop} />
</main>
);

// Şablonlar
const MainTemplate = ({ children }) => (
<>
<Header />
<Content>{children}</Content>
</>
);

// Sayfalar
const HomePage = () => (
<MainTemplate>
<h2>My Form</h2>
<p>This is a basic example demonstrating Atomic Design in React.</p>
</MainTemplate>
);

Atomic Design’in Avantajları

Atomic Design Deseni, React’in bileşen tabanlı mimarisiyle mükemmel uyum sağlar ve şu avantajları sunar:

  • Yeniden Kullanılabilirlik: Arayüzleri en küçük parçalara ayırarak, bileşenleri yeniden kullanmak ve farklı projelerde modüler kompozisyonları kullanmak daha kolay hale gelir.
  • Tutarlılık: Atomic Design, kullanıcı deneyimi ve marka kimliği için kritik olan UI tutarlılığını sağlar.
  • Kolay Bakım: Bileşenler iyi organize edildiğinde, zaman içinde bunları güncellemek ve bakımını yapmak çok daha basit hale gelir.
  • İşbirliğini Artırır: Atomic Design prensiplerine dayalı ortak bir tasarım dili, kod tabanını anlamayı ve katkıda bulunmayı kolaylaştırarak iletişimi ve kullanımı artırır.
  • Kod Kalitesini Artırır: Her bileşen veya hizmetin yalıtılmış bir ortamı olması, testlerin daha etkili olmasını sağlar ve tutarlı bir kod kalitesini garanti eder.

Atomic Design deseninin etkinliği, Shopify ve IBM gibi önde gelen teknoloji şirketleri tarafından benimsenmesiyle kanıtlanmıştır ve gerçek dünya uygulamalarında pratikliği ve ölçeklenebilirliği göstermektedir.

  • Shopify: Shopify, kullanıcı arayüzü geliştirmesini kolaylaştırmak için Atomic Design’i benimsemiştir. Atomic Design prensiplerini kullanarak tutarlı ve ölçeklenebilir bir tasarım sistemi yaratmışlardır.
  • IBM: IBM’in Carbon Design System’i, Atomic Design prensiplerini kullanarak birleşik ve ölçeklenebilir bir UI/UX çerçevesi oluşturmuştur.

Atomic Design prensibini avantajımıza kullanırken aşırı mühendislikten kaçınmak da önemlidir. Bileşenleri gereksiz yere küçük parçalara ayırmak, performans üzerinde olumsuz etkiler yaratabilir. Bu nedenle, bileşenleri daha küçük parçalara ayırırken performans etkilerine dikkat etmeliyiz.

Okuduğunuz için teşekkürler

Her zaman gelişmek için yer olduğunu anlıyorum. Lütfen düşüncelerinizi paylaşmaktan çekinmeyin.

--

--

Selim KURT

Software Developer - Mobile & Web Developer #react #reactnative #nextjs #frontend #digitaltransformation #javascript