---
title: 'Mimarlık Düzeyleri'
source: 'https://academia.sh/tr/kurslar/mimarin-rolu/mimarlik-duzeyleri'
course: 'Mimarın Rolü'
language: tr
updated: '2026-08-17T18:10:33+00:00'
license: 'CC BY-SA 4.0'
---

# Mimarlık Düzeyleri

Uygulama, çözüm ve kurumsal mimarinin karar kapsamıyla ayrılması: aynı karar kümesinin işlettiği birimlere göre üç düzeye dağıtılması, her düzeyin kapsadığı karar ve etkilediği birim sayısı, kararın yanlış düzeyde verilmesinde habersiz kalan birim, yinelenen karar ve çelişen gerçekleştirim sayıları.

Önceki ders on bir kararı tek bir kod tabanı üzerinde ölçtü ve hepsini aynı düzlemde sıraladı.
Oysa o kararların hepsi aynı yerde verilmez. Ayar değerlerinin nereden okunacağı bütün sistemi
bağlar; günlük raporun ayrı bir modülde üretilmesi iki birimin ötesine geçmez; kiosk ucunun ayrı
bir dağıtım birimi olması yalnız kendi içinde kalır.

Mimarlık düzeyleri bu ayrımın adıdır: **uygulama mimarisi**, **çözüm mimarisi** ve **kurumsal
mimari**. Üç düzey genellikle unvanla anlatılır. Bu derste unvanla değil kapsamla tanımlanıyorlar
ve kapsam sayılıyor: bir karar kaç dağıtım birimini bağlıyor.

## Düzeyi Kapsam Belirler

Önceki dersin erişim alanı ölçüsü modül düzeyindeydi. Düzey sorusu için bir eşleme daha gerekir:
hangi modülü hangi birim işletiyor. **Dağıtım birimi** ayrı yayınlanan, ayrı koşan ve genellikle
ayrı bir ekibin baktığı parçadır; Yazılım Tasarımı müfredatının alan odaklı tasarım kursunda
kurulan sınırlı bağlam ayrımıyla aynı yöne bakar, ama sınırı çizen şey burada alan değil işletme
sorumluluğudur.

Bir kararın kapsamı şudur: kararın erişim alanındaki modüllerden en az birini işleten birimlerin
kümesi (**MN4**). Kapsam bir birimse karar uygulama düzeyindedir; bütün ağı ya da ağın büyük
bölümünü bağlıyorsa kurumsal; ikisinin arasındaysa çözüm düzeyindedir. "Büyük bölüm" bir eşiktir
ve eşiğin kaynağı yazılmalıdır: burada birimlerin üçte ikisi seçildi (**MN5**).

İlk dosya önceki dersin ithal grafiğini ve karar gövdelerini yeniden verir; blok kendi başına
çalışsın diye grafik tekrarlanıyor.

```js
// mimari/model.mjs — MODEL kutuphane agi kod tabani: ithal grafigi ve kararlarin govdesi.
// Gercek bir kurum degildir; kenarlar ve karar govdeleri elle secilmistir.
export const ITHAL = {
  yapilandirma: [], zaman: [], kayit: ["yapilandirma"],
  "veri-erisim": ["yapilandirma", "kayit"], "olay-yolu": ["yapilandirma", "kayit"],
  "kimlik-dogrulama": ["veri-erisim", "yapilandirma", "kayit"], yetki: ["kimlik-dogrulama"],
  "katalog-baglayici": ["yapilandirma", "kayit"],
  "katalog-onbellek": ["katalog-baglayici", "zaman"],
  "odunc-kural": ["yapilandirma", "zaman"],
  "odunc-cekirdek": ["odunc-kural", "veri-erisim", "olay-yolu", "zaman", "katalog-baglayici"],
  ayirtma: ["odunc-cekirdek", "bildirim-kuyruk", "veri-erisim"],
  "uye-kayit": ["veri-erisim", "kayit"],
  "uye-ceza": ["uye-kayit", "odunc-kural", "zaman", "veri-erisim"],
  "sube-envanter": ["veri-erisim", "olay-yolu"],
  "sube-esitleme": ["sube-envanter", "olay-yolu", "katalog-baglayici", "kayit"],
  "bildirim-kuyruk": ["veri-erisim", "olay-yolu"],
  "bildirim-eposta": ["bildirim-kuyruk", "yapilandirma"],
  "rapor-gunluk": ["veri-erisim", "zaman"],
  "rapor-toplu": ["veri-erisim", "sube-envanter", "zaman", "kayit"],
  "web-ucu": ["odunc-cekirdek", "katalog-onbellek", "uye-kayit", "ayirtma", "kimlik-dogrulama"],
  "personel-ucu": ["odunc-cekirdek", "uye-kayit", "uye-ceza", "sube-envanter", "rapor-gunluk",
    "kimlik-dogrulama", "yetki"],
  "kiosk-ucu": ["odunc-cekirdek", "katalog-onbellek", "kimlik-dogrulama"],
  "toplu-is": ["rapor-toplu", "sube-esitleme", "bildirim-kuyruk", "bildirim-eposta"],
};
export const KARAR = [
  { ad: "veri erisimi tek katmandan gecer", govde: ["veri-erisim"] },
  { ad: "ayar degerleri tek kaynaktan okunur", govde: ["yapilandirma"] },
  { ad: "envanter olay yolu uzerinden esitlenir", govde: ["olay-yolu", "sube-esitleme"] },
  { ad: "dis kataloga tek baglayici uzerinden erisilir", govde: ["katalog-baglayici"] },
  { ad: "kimlik dogrulama tek modulde toplanir", govde: ["kimlik-dogrulama"] },
  { ad: "odunc suresi kurali yapilandirmadan okunur", govde: ["odunc-kural"] },
  { ad: "saat kaynagi tek modulden alinir", govde: ["zaman"] },
  { ad: "ceza hesabi uye kaydindan ayri durur", govde: ["uye-ceza"] },
  { ad: "gunluk rapor ayri bir modulde uretilir", govde: ["rapor-gunluk"] },
  { ad: "eposta bildirimi duz metin govdeyle gider", govde: ["bildirim-eposta"] },
  { ad: "kiosk ucu ayri bir dagitim birimidir", govde: ["kiosk-ucu"] },
];
export const MODULLER = Object.keys(ITHAL);
export function bagimliKapanis(cekirdek) {
  const kapali = new Set(cekirdek);
  for (let buyudu = true; buyudu; ) {
    buyudu = false;
    for (const m of MODULLER)
      if (!kapali.has(m) && ITHAL[m].some((h) => kapali.has(h))) { kapali.add(m); buyudu = true; }
  }
  return kapali;
}
```

## Ölçüm

İkinci dosya birim eşlemesini kurar, her kararın kapsamını sayar ve aynı karar kümesini üç
düzende koşturur.

```js
// mimari/duzey.mjs — kararlarin kapsadigi birim sayisi ve uc duzeye dagilimi
import { KARAR, bagimliKapanis } from "./model.mjs";

// BIRIM — MODEL kutuphane aginin dagitim birimleri; her birim hangi modulleri isletir
const BIRIM = {
  "web-portali": ["web-ucu"],
  "personel-uygulamasi": ["personel-ucu"],
  "kiosk-agi": ["kiosk-ucu"],
  "odunc-servisi": ["odunc-cekirdek", "odunc-kural", "ayirtma"],
  "uye-servisi": ["uye-kayit", "uye-ceza"],
  "katalog-tumlestirme": ["katalog-baglayici", "katalog-onbellek"],
  "envanter-servisi": ["sube-envanter", "sube-esitleme"],
  "bildirim-servisi": ["bildirim-kuyruk", "bildirim-eposta"],
  "rapor-servisi": ["rapor-gunluk", "rapor-toplu", "toplu-is"],
  "ortak-altyapi": ["yapilandirma", "kayit", "zaman", "veri-erisim", "olay-yolu",
    "kimlik-dogrulama", "yetki"],
};
const BIRIMLER = Object.keys(BIRIM);
const B = BIRIMLER.length;
const KURUMSAL_ESIK = Math.ceil((B * 2) / 3); // secilmis kural: birimlerin ucte ikisi

const kapsam = (k) => {
  const alan = bagimliKapanis(k.govde);
  return BIRIMLER.filter((b) => BIRIM[b].some((m) => alan.has(m)));
};
const duzeyAdi = (n, e = KURUMSAL_ESIK) => (n === 1 ? "uygulama" : n >= e ? "kurumsal" : "cozum");

const olcum = KARAR.map((k) => ({ ad: k.ad, n: kapsam(k).length, kume: kapsam(k) }));
const sut = (s, n) => String(s).padEnd(n);
console.log(`${B} birim, ${KARAR.length} karar, kurumsal esigi = ${KURUMSAL_ESIK} birim\n`);
console.log(sut("karar", 46) + sut("birim", 8) + "duzey");
console.log("-".repeat(64));
for (const o of [...olcum].sort((a, b) => b.n - a.n)) console.log(sut(o.ad, 46) + sut(o.n, 8) + duzeyAdi(o.n));

console.log("");
for (const d of ["kurumsal", "cozum", "uygulama"]) {
  const g = olcum.filter((o) => duzeyAdi(o.n) === d);
  const etkilenen = new Set(g.flatMap((o) => o.kume));
  console.log(`${sut(d, 10)} karar=${sut(g.length, 4)} etkiledigi birim=${sut(etkilenen.size, 4)} ort. kapsam=${(g.reduce((t, o) => t + o.n, 0) / g.length).toFixed(1)}`);
}
console.log("esik duyarliligi: " + [6, 7, 8].map((e) =>
  `esik ${e} -> ${olcum.filter((o) => duzeyAdi(o.n, e) === "kurumsal").length} kurumsal`).join(", "));

// ---- karsilastirma: ayni karar kumesi uc duzende ----
// SECENEK[k] = kararin makul secenek sayisi; bagimsiz veren birim bunlardan birini secer
const SECENEK = [3, 4, 3, 2, 3, 4, 2, 3, 2, 3, 2];
function uretec(tohum) { let s = tohum >>> 0; return () => (s = (s * 1664525 + 1013904223) >>> 0) / 2 ** 32; }
const rast = uretec(48151); // tohum gorunur; ayni tohum ayni sayilari verir

let habersiz = 0, yineleme = 0, celisen = 0;
olcum.forEach((o, i) => {
  const oteki = o.n - 1;               // kararin sahibi disindaki kapsam birimleri
  habersiz += oteki; yineleme += oteki;
  const sahibinSecimi = Math.floor(rast() * SECENEK[i]);
  for (let j = 0; j < oteki; j++) if (Math.floor(rast() * SECENEK[i]) !== sahibinSecimi) celisen++;
});
const danismaYerel = 0, danismaUc = olcum.reduce((t, o) => t + o.n - 1, 0), danismaMerkez = KARAR.length * (B - 1);

console.log(`\n${sut("duzen", 12) + sut("habersiz", 10) + sut("yineleme", 10) + sut("celisen", 9)}danisma`);
console.log("-".repeat(50));
console.log(sut("yerel", 12) + sut(habersiz, 10) + sut(yineleme, 10) + sut(celisen, 9) + danismaYerel);
console.log(sut("uc duzey", 12) + sut(0, 10) + sut(0, 10) + sut(0, 9) + danismaUc);
console.log(sut("merkezi", 12) + sut(0, 10) + sut(0, 10) + sut(0, 9) + danismaMerkez);

console.log(`\nyerel duzen ${danismaUc} danismadan kacinir, karsiliginda ${celisen} celisen gerceklestirim alir`);
console.log(`basabas: bir celisen gerceklestirim ${(danismaUc / celisen).toFixed(2)} danismadan pahaliysa uc duzey kazanir`);
console.log(`merkezi duzen uc duzeyden ${danismaMerkez - danismaUc} fazla danisma harcar, celisen sayisi ikisinde de 0`);
const tekil = olcum.filter((o) => o.n === 1).length;
console.log(`bunun ${tekil * (B - 1)}'i kapsami tek birim olan ${tekil} karar icin harcanir`);
```

```
10 birim, 11 karar, kurumsal esigi = 7 birim

karar                                         birim   duzey
----------------------------------------------------------------
ayar degerleri tek kaynaktan okunur           10      kurumsal
veri erisimi tek katmandan gecer              9       kurumsal
envanter olay yolu uzerinden esitlenir        8       kurumsal
saat kaynagi tek modulden alinir              8       kurumsal
dis kataloga tek baglayici uzerinden erisilir 7       kurumsal
odunc suresi kurali yapilandirmadan okunur    5       cozum
kimlik dogrulama tek modulde toplanir         4       cozum
ceza hesabi uye kaydindan ayri durur          2       cozum
gunluk rapor ayri bir modulde uretilir        2       cozum
eposta bildirimi duz metin govdeyle gider     2       cozum
kiosk ucu ayri bir dagitim birimidir          1       uygulama

kurumsal   karar=5    etkiledigi birim=10   ort. kapsam=8.4
cozum      karar=5    etkiledigi birim=8    ort. kapsam=3.0
uygulama   karar=1    etkiledigi birim=1    ort. kapsam=1.0
esik duyarliligi: esik 6 -> 5 kurumsal, esik 7 -> 5 kurumsal, esik 8 -> 4 kurumsal

duzen       habersiz  yineleme  celisen  danisma
--------------------------------------------------
yerel       47        47        31       0
uc duzey    0         0         0        47
merkezi     0         0         0        99

yerel duzen 47 danismadan kacinir, karsiliginda 31 celisen gerceklestirim alir
basabas: bir celisen gerceklestirim 1.52 danismadan pahaliysa uc duzey kazanir
merkezi duzen uc duzeyden 52 fazla danisma harcar, celisen sayisi ikisinde de 0
bunun 9'i kapsami tek birim olan 1 karar icin harcanir
```

## Dağılımın Okunması

On bir karar beş kurumsal, beş çözüm ve bir uygulama düzeyi kararına ayrıldı. Kurumsal düzeydeki
beş kararın ortalama kapsamı 8,4 birim, çözüm düzeyindeki beş kararınki 3,0 birim. Birleşim
sütunu da bilgi veriyor: kurumsal düzeydeki beş karar on birimin **tamamına** dokunuyor, çözüm
düzeyindeki beş karar sekiz birime.

Eşiğin kırılganlığı burada da ölçülü. Kurumsal eşiği yediden altıya indirmek hiçbir kararı
değiştirmiyor, çünkü kapsamı altı birim olan karar yok; sekize çıkarmak ise dış katalog
bağlayıcısı kararını kurumsal düzeyden çözüm düzeyine indiriyor. Eşik bir seçimdir, sıralama
değildir; hangi kararın hangi kararın üstünde olduğu ölçümden gelir, sınır bir kuraldan.

Dağılımın söylediği asıl şey şudur: hiçbir karar konusu gereği bir düzeye ait değildir. Saatin
nereden okunacağı, konu olarak bakıldığında bir uygulama ayrıntısıdır; kapsamı sekiz birimdir ve
bu modelde envanter eşitlemesiyle aynı düzeye düşer. Kararın düzeyi kararın konusundan değil,
kaç birimin ona bağımlı olmasından çıkar.

## Yanlış Düzeyin Bedeli

Alt tablo aynı on bir kararı üç düzende koşturuyor. **Yerel düzende** her karar gövdesinin
bulunduğu birimde verilir ve orada kalır. **Merkezî düzende** her karar bütün birimlere
danışılarak verilir. **Üç düzeyli düzende** her karar ölçülen kapsamının düzeyinde verilir ve
yalnız kapsamdaki birimlere danışılır.

Yerel düzende kapsam içindeki 47 birim kararı hiç duymuyor. Duymayan birim işini yapmak zorunda
olduğu için aynı kararı kendisi veriyor: 47 yinelenen karar. Yinelenen kararların hepsi
çakışmıyor — her karar için makul seçenek sayısı ikiyle dört arasında (**MN6**) ve bağımsız veren
birim bunlardan birini seçiyor. Tohumu 48151 olan üreteçle 47 yinelemenin **31'i** sahibin
seçiminden farklı çıktı, yani 31 çelişen gerçekleştirim.

Yerel düzenin kazancı 47 danışmadan kaçınmasıdır. Buradan başabaş noktası okunur: bir çelişen
gerçekleştirimin uzlaştırılması **1,52 danışmadan** pahalıysa üç düzeyli düzen kazanır. Bu, bir
tercih değil bir hesaptır ve sayı modelin girdilerine bağlıdır; seçenek sayıları büyüdükçe
çelişen gerçekleştirim artar ve başabaş noktası aşağı iner.

Merkezî düzen çelişkiyi de sıfıra indiriyor, ama 99 danışmayla — üç düzeyli düzenden 52 fazla.
Bunun dokuzu tek bir karar için harcanıyor: kiosk ucunun ayrı bir dağıtım birimi olması kararının
kapsamı tek birim, buna rağmen dokuz birime daha danışılıyor. Yanlış düzeyde karar vermenin iki
yönü var ve ikisinin de bir sayısı var: kararı olduğundan alçak düzeyde vermek habersiz birim ve
çelişen gerçekleştirim üretir, olduğundan yüksek düzeyde vermek boşa danışma üretir.

## Özet

- Bir kararın düzeyi konusundan değil kapsamından okunur; kapsam, kararın erişim alanındaki
  modülleri işleten dağıtım birimlerinin sayısıdır.
- Model ağda on birim ve on bir karar var; kurumsal eşiği birimlerin üçte ikisi (7 birim) olarak
  seçildiğinde beş kurumsal, beş çözüm ve bir uygulama düzeyi kararı çıkıyor.
- Kurumsal düzeydeki beş karar on birimin tamamına dokunuyor (ortalama kapsam 8,4); çözüm
  düzeyindeki beş karar sekiz birime (ortalama kapsam 3,0).
- Yerel düzende 47 birim kararı duymuyor, 47 karar yeniden veriliyor ve tohumu 48151 olan
  üreteçle bunların 31'i sahibin seçiminden farklı çıkıyor; başabaş noktası bir çelişen
  gerçekleştirimin 1,52 danışmaya eşit olduğu yerdir.
- Merkezî düzen çelişkiyi sıfırlar ama 99 danışma harcar; bunun dokuzu kapsamı tek birim olan
  tek bir karar içindir.

## Sonraki Adım

İki ders de kararı verilmiş bir şey gibi ele aldı: karar vardır, kapsamı ölçülür, düzeyi
belirlenir. Kararın kim tarafından verildiği, verildikten sonra kime ve nasıl duyurulduğu ve
duyurulduktan sonra gerçekten uygulanıp uygulanmadığı hiç sorulmadı. Üç düzeyli düzenin 47
danışmasını yapan biri var; o kişinin işi yalnız karar vermek değil. Sonraki ders mimarın işini
üç sorumluluğa ayırır — karar, iletişim ve gözetim — ve üçünü bir matris olarak kurar. Ölçülecek
olan şudur: karar verilmiş ve duyurulmuş olmasına rağmen kodda karşılığı olmayan kararların oranı,
ve bu oranın gözetim eklendiğinde ne kadar değiştiği.
