Katmanlı Mimari
- İngilizcesi
- Layered Architecture
- Okunuşu
- leyırd arkitekçır
Kısaca
Katmanlı mimari, uygulamayı sunum, iş mantığı ve veri erişimi gibi yatay katmanlara böler ve her katman yalnızca altındaki katmanı çağırır.
Katmanlı mimari nedir?
Katmanlı mimari, bir uygulamayı yapılandırmanın en eski ve en yaygın yollarından biridir. Kod, her biri tek tür sorumluluğa sahip, üst üste dizilmiş yatay katmanlara bölünür. Tipik bir web uygulamasında HTTP isteklerini ya da kullanıcı arayüzünü yöneten bir sunum katmanı, alanın kurallarını uygulayan ve çoğunlukla servis katmanı denen bir iş mantığı katmanı ve veritabanını okuyup yazan bir veri erişim katmanı bulunur.
Temel kural, bağımlılıkların aşağıya doğru işaret etmesidir: bir katman hemen altındaki katmanı çağırabilir ama asla yukarı doğru çağırmamalıdır. Katı (kapalı) bir katmanlı tasarımda her istek sırayla her katmandan geçer, gevşek (açık) tasarım ise bazı çağrıların bir katmanı atlamasına izin verir. Her katman ayrıntılarını net bir arayüzün arkasında gizlediği için veri nasıl saklanıyor ya da sayfalar nasıl oluşturuluyor bunu iş kurallarını yeniden yazmadan değiştirebilir, geliştiriciler de belirli bir kod türünün nereye ait olduğunu her zaman bilir.
Restoran iyi bir benzetmedir: garsonlar önde sipariş alır, aşçılar mutfakta yemeği hazırlar ve depo malzeme sağlar. Garson doğrudan depoya gitmez ve depo müşterilerle konuşmaz. Katmanlı mimari birçok kurumsal ve web uygulamasının ve birçok framework başlangıç şablonunun varsayılan biçimidir; bir monolit için makul bir başlangıç noktasıdır.
Katmanlı mimari sıklıkla clean ve hexagonal architecture ile karşılaştırılır. Klasik katmanlı tasarımda iş mantığı veri erişim katmanına bağımlıdır, dolayısıyla veritabanı ayrıntıları yukarıya sızabilir; clean ve hexagonal architecture ise bu bağımlılığı tersine çevirir, böylece çekirdek arayüzleri tanımlar ve veritabanı kodu onlara takılır. MVC'den de farklıdır, çünkü MVC sunum katmanının kendisini düzenler; ayrıca kodun mantıksal bir gruplaması olan katman (layer), ayrı bir fiziksel makine ya da süreç olan tier ile aynı şey değildir.
Önemli noktalar
- Kod; sunum, iş mantığı ve veri erişimi gibi yatay katmanlara bölünür.
- Her katman yalnızca altındaki katmana bağımlıdır.
- Katmanlar sorumlulukları netleştirir ve parçaların bağımsız değişmesini sağlar.
- Klasik katmanlamada iş mantığı veri erişimine bağımlıdır; clean ve hexagonal architecture bunu tersine çevirir.
- Katmanlar (layer) kodun mantıksal gruplarıdır; tier'lar ise fiziksel dağıtımlardır.
Örnek
// Data access layer: the only code that talks to the database
const orderRepository = { insert: (order: object) => db.insert("orders", order) };
// Business logic layer: applies the rules, then calls the layer below
const orderService = {
async placeOrder(items: string[]) {
if (items.length === 0) throw new Error("An order needs at least one item");
return orderRepository.insert({ items, status: "placed" });
},
};
// Presentation layer: handles HTTP and calls the business layer
app.post("/orders", async (req, res) => {
res.status(201).json(await orderService.placeOrder(req.body.items));
});Sık sorulan sorular
Katman (layer) ile tier arasındaki fark nedir?
Katman, iş mantığı katmanı gibi bir uygulamanın içindeki mantıksal bir kod gruplamasıdır. Tier ise üç katmanlı (three-tier) bir sistemdeki tarayıcı, uygulama sunucusu ve veritabanı sunucusu gibi fiziksel bir dağıtım birimidir; dolayısıyla birkaç katman tek bir tier'da çalışabilir.
Katmanlı mimari ile clean architecture arasındaki fark nedir?
İkisi de sorumlulukları ayırır ama bağımlılıkları farklı yönde işaret eder. Katmanlı mimaride iş mantığı veri erişim katmanına bağımlıdır; clean architecture'da ise iş çekirdeği hiçbir şeye bağımlı değildir ve veritabanı kodu, çekirdeğin tanımladığı arayüzleri uygular.
Architecture sinkhole anti-pattern'i nedir?
İsteklerin çoğunun, yalnızca bir repository metodunu çağıran bir servis metodu gibi, gerçek bir mantık içermeden katmanlardan doğrudan geçmesi durumudur. Bunun biraz olması normaldir ama her yerdeyse katmanlar değer katmadan tören ekler.
İlgili sayfalar
- İlgilerin AyrılmasıYazılım Mimarisi, s. 19İlgilerin ayrılması, bir programı her biri davranışının açıkça tanımlanmış tek bir yönünden sorumlu ayrı parçalara bölen bir tasarım ilkesidir.
- Clean ArchitectureYazılım Mimarisi, s. 5Clean architecture, temel iş kuralları framework'e, veritabanına ya da kullanıcı arayüzüne asla bağımlı olmasın diye yazılımı katmanlara ayırma yöntemidir.
- Hexagonal ArchitectureYazılım Mimarisi, s. 18Hexagonal architecture, çekirdek iş mantığının dış dünyayla yalnızca portlar ve değiştirilebilir adaptörlerle konuştuğu bir yazılım yapılandırma yöntemidir.
- MVCYazılım Mimarisi, s. 26MVC, uygulamayı veri ve mantık için Model, gösterim için View ve kullanıcı girdisini yöneten Controller olmak üzere üçe ayıran bir mimari desendir.
- MonolitYazılım Mimarisi, s. 25Monolit, tek parça olarak derlenip dağıtılan, tüm özelliklerin tek kod tabanını, tek süreci ve çoğunlukla tek veritabanını paylaştığı yazılım uygulamasıdır.
- Repository DeseniYazılım Mimarisi, s. 33Repository deseni, veri erişimini koleksiyon benzeri bir arayüzün arkasına gizler; iş kodu nesnelerin nerede saklandığını bilmeden yükleyip kaydedebilir.
Bu sayfada bir hata ya da eksik mi gördünüz?Düzeltme önerin