Oluşturduğumuz yazılım sistemlerinde, kullanıcının sistemden beklentisini ve birleşik sistemler yapısının birbirleriyle olan ihtiyaçlarını anlamak zor olabilir. Bu yazıda iletişim halinde olan sistemler kümesini anlamaya çalışacağız.
Konuya doğrudan yazılımdan başlamak yerine, önce gerçek hayattaki bir durumla eşleştirerek anlamaya çalışalım. Sohbet halinde iki insan düşünelim: Biri bir şeyler anlatır, diğeri ise dinler. Dinleyen bazen başını sallar, bazen gözlerini kısar, bazen de tam anlamasa bile “hmm” deyip geçer. Gerçek iletişim sadece konuşmakla değil, aynı dili konuşmakla da sınırlı değildir; esas olan, aynı anlamı paylaşabilmektir.
Yazılım sistemleri de tıpkı insanlar gibidir. Her biri kendi görevini yerine getirir, ancak diğer sistemlerle ilişki kurmak zorundadır. Örneğin bir sipariş sistemi, bir kargo sistemiyle etkileşim kurmadan var olabilir mi? Ya da bir kullanıcı verisi, etrafında şekillenen hizmetler olmadan gerçekten anlam kazanabilir mi?
İnsanlar arası ilişkilerde “bağımlılık” genellikle sağlıksız bir durumu ifade eder. Yazılım sistemlerinde de bu geçerlidir. Bir modül diğerine sıkı sıkıya bağlıysa, o değiştiğinde, diğeri de kırılır. Ama tamamen kopuk olmak da mümkün değildir. Önemli olan "bağlı ama bağımlı değil" olarak kalmaktır.
İki kişi aynı dili konuşuyor olabilir ama aynı şeyi mi kastediyorlar? Yazılımda da bu geçerlidir. Sistemler yalnızca veri alışverişi yapmaz. O verilerin bağlamı, türü, ne zaman gönderildiği, ne amaçla gönderildiği çok önemlidir.
Belki de yazılımda ilişkisel sistemleri tasarlarken gözden kaçan en önemli unsur empatidir. Empati, diğer sistemin ihtiyaçlarını, sınırlamalarını ve yükünü öncesinden hesaplayıp, düşünüp buna göre tasarlanmasını gerektirir.

İnsan iletişimi ve yazılım algoritmalarının bir arada gösterildiği temsili bir görsel. (Yapay zeka ile oluşturulmuştur.)
Yazılım sistemleri, makineler arası iletişimden fazlasıdır. Onlar, insan tarafından tasarlanan, insan için çalışan, insan gibi düşünen yapılardır. Sağlıklı ilişkiler kurmak, anlamlı mesajlar göndermek ve empatiyle tasarlamak, hem yazılımın ömrünü uzatır hem de geliştiricinin ruhunu besler. İlişkisel sistemleri anlamak, sadece daha iyi kod yazmak değil; daha iyi ilişkiler kurmayı da öğrenmektir.
Şimdi de bu anlatılanları farklı ilişkisel sistem düzeylerinde teknik olarak yorumlayalım.
Senaryo: Bir e-ticaret sisteminde üç servis olduğunu düşün:
Bağlılık (Coupling):
Haberleşme (Communication):
Anlamlandırma (Semantics):
Bu, semantic interoperability örneğidir.
Senaryo: Aynı kod tabanı içinde ayrı modüller var:
Bağlılık:
Haberleşme:
Anlamlandırma:
Senaryo: users ve posts tabloları var.
Bağlılık:
Haberleşme:
Anlamlandırma:
Senaryo: Bir frontend uygulaması ve bir backend API.
Bağlılık:
Haberleşme:
Anlamlandırma:
Senaryo: Bankacılık sistemi
Bağlılık:
Haberleşme:
Anlamlandırma:
Yazılımda ilişkisel sistemleri anlamak, sadece sistemlerin nasıl bağlandığını değil, bu bağlantıların nasıl anlam taşıdığını da anlamakla olur. Gevşek bağlılık, iyi tanımlanmış arayüzler, olay temelli düşünme ve anlam birlikteliği, sürdürülebilir ve genişletilebilir sistemlerin temel taşlarıdır.
Okuduğunuz için teşekkürler.
İlişik Sistemler: Bir Konuşmanın Anatomisi
Bağlılık ve Bağlı Kalma: Sağlıklı İlişkiler Kurmak
Anlamlı İletişim: Duyulmak mı, Anlaşılmak mı?
Empati ile Sistem Tasarımı
Yazılım Mimarisine İnsani Bir Bakış
1. Mikroservisler Arası İlişki
2. Modüler Monolith Yapısında Modüller Arası İlişki
3. Veritabanı Düzeyinde İlişki
4. API Tabanlı Sistemler
5. Event-Driven Architecture (EDA)