Mert Özen Her Satırda Daha İleri

Blog

Mert Özen'in yazılım geliştirme, backend, frontend ve DevOps üzerine blog yazıları.

Seriler
91 yazı bulundu #yazilim-tasarimi
Class Diagram'dan Koda ve Koddan Diyagrama: Domain Model, Design Model ve puml-gen
Yazılım Tasarımı SERİ 06

Class Diagram'dan Koda ve Koddan Diyagrama: Domain Model, Design Model ve puml-gen

Domain model iş dünyasının kavramlarını tipsiz ve operation'sız gösterir, design class diagram ise aynı vakanın C#'a yakın tasarım kararlarını; ilki elle çizilir, ikincisinin dilimleri koda dökülür ve puml-gen gibi araçlarla koddan üretilen diyagramlar yalnız gözlem ve drift kontrolü için kullanılır. Yazıda İK Portalı'nın izin modülü diyagramdan EF Core configuration'ına ve DDL'e, oradan da puml-gen ile tekrar PlantUML'e taşınıyor.

7 Kas 2026 14 dk 2
Class Diagram 2: Association, Aggregation, Composition, Generalization ve Dependency — C# Karşılıklarıyla
Yazılım Tasarımı SERİ 05

Class Diagram 2: Association, Aggregation, Composition, Generalization ve Dependency — C# Karşılıklarıyla

Association kalıcı bir bağdır ve C#'ta navigation property olur; composition'da parça tek sahibe aittir ve onunla silinir, EF Core'da owned/complex type ya da cascade delete'tir; aggregation'ın UML 2.5.1'de kesin bir anlamı yoktur. Altı ilişkinin notasyonu ve C# karşılığı, EF Core'un zorunlu ilişkilerdeki cascade varsayılanı, qualified association ve Approval'ın association class'tan ayrı bir class'a yükselmesi.

7 Kas 2026 15 dk 2
Class Diagram 1: Class, Attribute, Operation, Visibility, Multiplicity ve Stereotype'lar
Yazılım Tasarımı SERİ 04

Class Diagram 1: Class, Attribute, Operation, Visibility, Multiplicity ve Stereotype'lar

Class diagram'daki her işaret kodda bir karardır: [0..1] nullable tip, [0..*] collection, eğik çizgi hesaplanan property, altı çizili satır static üye, {readOnly} hiç değişmeyen property demektir. Class kutusunun üç bölmesi, attribute ve operation söz dizimi, C# ile örtüşmeyen visibility köşeleri, interface, enumeration, data type ve stereotype'lar ile aynı diyagramın Mermaid hâli.

7 Kas 2026 13 dk 2
Use Case Diagram ve Use Case Spesifikasyonu: Actor, include, extend ve Cockburn Şablonu
Yazılım Tasarımı SERİ 03

Use Case Diagram ve Use Case Spesifikasyonu: Actor, include, extend ve Cockburn Şablonu

Use case diagram sistemi dışarıdan gösterir: actor'lar rol, use case'ler hedeftir; include ok ile ana use case'ten zorunlu adıma, extend ok ile koşullu eklentiden ana use case'e gider. İK Portalı izin modülünün use case diagram'ı, Cockburn'ün fully dressed şablonuyla İzin Talep Et spesifikasyonu, use case'ten user story ve API endpoint'ine eşleme ve Mermaid ile aynı diyagram.

7 Kas 2026 14 dk 2
Requirement'tan Diyagrama: Hangi Soru Hangi Diyagramla Cevaplanır?
Yazılım Tasarımı SERİ 02

Requirement'tan Diyagrama: Hangi Soru Hangi Diyagramla Cevaplanır?

Her diyagram bir soruyu cevaplar: kim ne yapar sorusunu use case, hangi kavramlar sorusunu class, kim kimi çağırır sorusunu sequence, object hangi durumlardan geçer sorusunu state machine diagram'ı cevaplar. İK Portalı İzin Talebi modülünün requirement metni, isim, fiil ve koşullardan aday class, use case ve guard çıkarmak, hedef kitleye göre detay seviyesi ve serinin haritası.

7 Kas 2026 12 dk 2
UML Nedir? Kısa Tarih, UML 2.5.1'in 14 Diyagramı ve Gerçekte Hangilerini Kullanırsın
Yazılım Tasarımı SERİ 01

UML Nedir? Kısa Tarih, UML 2.5.1'in 14 Diyagramı ve Gerçekte Hangilerini Kullanırsın

UML, kodun içine dağılmış modeli herkesin aynı okuduğu bir notasyonla ortaya koyan, OMG'nin standart modelleme dilidir; güncel sürümü 2017 tarihli UML 2.5.1'dir ve 7 structure, 7 behavior olmak üzere 14 diyagram tanımlar. Method savaşlarından bugüne kısa tarih, sahada gerçekten kullanılan diyagramlar, model ile diyagram farkı ve Fowler'ın sketch, blueprint, programming language modları.

7 Kas 2026 12 dk 2
GoF Dışında Bilmen Gereken Kod Seviyesi Pattern'ler: Null Object, Specification, Result ve Pipeline
Yazılım Tasarımı SERİ 25

GoF Dışında Bilmen Gereken Kod Seviyesi Pattern'ler: Null Object, Specification, Result ve Pipeline

GoF kataloğunda olmayan dört pattern günlük C# kodunda sürekli işe yarar: Null Object ve Special Case "yok" durumunu davranışı olan bir object'e çevirip null kontrollerini kaldırır, Specification iş kuralını EF Core'un SQL'e çevirebileceği birleştirilebilir bir Expression olarak taşır, Result adımları Then ile hata akışına bağlar, Pipeline da dönüşümleri sıralı filter'lara böler. Func ile yazılan kuralın bütün tabloyu çekmesi, ExpressionVisitor ile parametre birleştirme ve Options pattern.

7 Kas 2026 17 dk 7
Anti-Pattern'ler: God Object, Service Locator, Singleton Abuse, Anemic Domain Model ve Pattern Hastalığı
Yazılım Tasarımı SERİ 24

Anti-Pattern'ler: God Object, Service Locator, Singleton Abuse, Anemic Domain Model ve Pattern Hastalığı

Anti-pattern, ilk bakışta makul görünen ama aynı sıkıntıyı tekrar tekrar üreten bir çözümdür ve tanımak, onu daha iyi bir yapıya taşıyan refactoring'i de bilmek demektir. Service Locator'ın ValidateOnBuild'den kaçırdığı bağımlılık, CA1506 ile ölçülen God Object, sıraya göre kırılan singleton test'leri, kuralı atlanan anemic model, Golden Hammer, Lava Flow, Poltergeist ve patternitis.

7 Kas 2026 14 dk 6
Visitor Pattern: Double Dispatch, ExpressionVisitor ve Pattern Matching ile Karşılaştırma
Yazılım Tasarımı SERİ 23

Visitor Pattern: Double Dispatch, ExpressionVisitor ve Pattern Matching ile Karşılaştırma

Visitor, C#'ın tek boyutlu virtual dispatch'ini Accept ve Visit çağrılarıyla ikiye katlayarak sabit bir tip hiyerarşisine element'lere dokunmadan yeni işlemler eklemeyi sağlar; bedeli, yeni bir tipin bütün visitor'ları kırmasıdır. Overload seçiminin static tip tuzağı, expression problem, ExpressionVisitor ve Roslyn CSharpSyntaxWalker, ve exhaustiveness kontrolü olmayan switch expression ile karşılaştırma.

7 Kas 2026 12 dk 3
Template Method Pattern: Algoritma İskeleti, Hook'lar ve Delegate'li Alternatifi
Yazılım Tasarımı SERİ 22

Template Method Pattern: Algoritma İskeleti, Hook'lar ve Delegate'li Alternatifi

Template Method, algoritmanın iskeletini base class'taki override edilemeyen bir method'a sabitler ve değişen adımları abstract method'lara ya da boş hook'lara bırakır. Unutulan override'ın sessizce yutulan hook'u (CS0114), Stream.CopyTo ve .NET 10'da davranışı değişen BackgroundService.ExecuteAsync, constructor'dan virtual çağrı tuzağı (CA2214) ve aynı akışı delegate'lerle composition ile kurmak.

7 Kas 2026 13 dk 7
Strategy Pattern Derinlemesine: Keyed Services, IEnumerable<IStrategy> ve Func ile Runtime Seçim
Yazılım Tasarımı SERİ 21

Strategy Pattern Derinlemesine: Keyed Services, IEnumerable<IStrategy> ve Func ile Runtime Seçim

Strategy'yi yazmak kolay, zor olan doğru strategy'yi runtime'da seçmek: keyed services tek bir key'le, IEnumerable<IStrategy> ve CanHandle object'in birden fazla özelliğine bakarak, Dictionary<string, Func<>> ise bağımlılığı olmayan formüllerde en az törenle seçer. Kayıt sırasının sessizce fiyat değiştirmesi, keyed kayıtların GetServices'te görünmemesi ve BCL'deki IComparer ile StringComparer örnekleri.

7 Kas 2026 12 dk 4
State Pattern: Sipariş Durumlarını switch Yerine State Object'leriyle Yönetmek
Yazılım Tasarımı SERİ 20

State Pattern: Sipariş Durumlarını switch Yerine State Object'leriyle Yönetmek

State pattern, durumla değişen davranışı her method'daki switch'ten alıp durum başına bir class'a taşır; base class'ın varsayılan cevabı "izin yok" olunca unutulan bir durum sessiz bir hata değil, gürültülü bir exception olur. Yeni eklenen OnHold durumunun kargoya izin verdiği naif koddan başlayıp state class'larını, derleyicinin async state machine'ini, tuple pattern'li switch expression alternatifini ve EF Core'da enum kolondan state object'ini yeniden kurmayı gerçek çıktılarla görüyoruz.

7 Kas 2026 13 dk 3
Blog Haritası