Seperation of Concerns Prensibi ve Yazılım Geliştirmede Uygulanması

Bedirhan Guven
Paycell Tech Team
Published in
2 min readDec 15, 2023

Yazılım geliştirme sürecinde, büyük ve karmaşık sistemlerin yönetimi ve sürdürülebilirliği önemli bir zorluktur. Seperation of Concerns (SoC) prensibi, bu zorlukları ele almak ve yazılım mimarisini optimize etmek için kullanılan kritik bir tasarım prensibidir.

Seperation of Concerns Nedir?

İlgilerin Ayrılması, yazılım sisteminin farklı işlevselliğe sahip olan unsurlarını birbirinden izole etme yaklaşımını benimser. Temel amacı, belirli bir ilgi alanının (concern) kod içindeki diğer ilgi alanlarından bağımsız olmasını sağlamaktır. Bu sayede, değişikliklerin belirli bir ilgi alanını etkilemesi ve bu değişikliklerin sistem genelinde yayılması önlenir.

Neden Bu Prensibi Kullanmalıyım?

  1. Maintainability : İlgilerin ayrılması, kodun bakımını kolaylaştırır. Bir ilgi alanındaki değişiklikler, sadece o alana odaklanan modüllerde yapılır, bu da bakım süreçlerini hızlandırır.
  2. Extensibility : Her ilgi alanı, kendi içinde değişebilir ve genişletilebilir olmalıdır. Bu, yeni özellikler eklemeyi kolaylaştırır ve sistemdeki değişikliklerin kontrol altında tutulmasını sağlar.
  3. Readability : İlgilerin ayrılması, kodun okunabilirliğini artırır. Kodun belirli bir işlevselliği ele alması, kodu anlamak ve hata ayıklamak için geliştiricilere net bir yol sağlar.

Bu Prensibi Nasıl Uygularım?

  1. Modularization : Yazılımı modüller halinde düzenleyerek her bir modülü belirli bir ilgi alanına odaklanacak şekilde tasarlamak. Modüller arasındaki bağımlılıkları minimize etmek.
  2. SOLID Prensipleri: Single Responsibility Principle (SRP), Open/Closed Principle (OCP), ve diğer SOLID prensipleri, ilgilerin ayrılmasını destekleyen temel prensiplerdir. SRP, her sınıfın yalnızca bir sorumluluğu olması gerektiğini belirtir.
  3. Dependency Injection : Bağımlılıkların enjekte edilmesi, farklı ilgi alanları arasındaki bağlantıları zayıflatır ve modülerliği artırır.
  4. Aspect-Oriented Programming (AOP): AOP, çeşitli ilgi alanlarına yönelik kodu modüler ve bağımsız bir şekilde organize etmeyi sağlar.

Örnek Senaryo

Bir e-ticaret uygulaması düşünelim. Sepet yönetimi, ödeme işlemleri ve kullanıcı hesap yönetimi gibi farklı modülleri olsun.Bu farklı ilgi alanlarına sahip modüller, bu prensibi uygulayarak birbirinden bağımsız olmalıdır. Bu, her bir modülün kendi içinde değişikliklere ve geliştirmelere olanak tanıyarak sistemdeki uyumsuzlukları en aza indirir. Bu senaryoyu koda döktüğümüzde aşağıdaki şekilde bir kod bloğu elde ederiz.

# Sepet Yönetimi Modülü
class ShoppingCart:
def __init__(self):
self.items = []

def add_item(self, item):
self.items.append(item)

# Ödeme İşlemleri Modülü
class PaymentProcessor:
def process_payment(self, amount):
# Ödeme işlemleri burada gerçekleşir
print(f"Ödeme yapıldı: {amount} TL")

# Kullanıcı Hesap Yönetimi Modülü
class UserManager:
def create_user(self, username, password):
# Kullanıcı oluşturma işlemleri burada gerçekleşir
print(f"{username} adında yeni bir kullanıcı oluşturuldu")

# Ana Uygulama
cart = ShoppingCart()
cart.add_item("Ürün 1")
cart.add_item("Ürün 2")

payment_processor = PaymentProcessor()
payment_processor.process_payment(100)

user_manager = UserManager()
user_manager.create_user("JohnDoe", "123456")

Bu örnekte, her modül (ShoppingCart, PaymentProcessor, UserManager) belirli bir ilgi alanına odaklanmış ve kendi sorumluluklarına sahiptir. Bir modüldeki değişiklikler, diğer modülleri etkilemez ve her biri kendi içinde sürdürülebilirdir.

Sonuç

SoC prensibi, karmaşıklığı azaltmak, sürdürülebilirlik ve genişletilebilirlik sağlamak adına güçlü bir araçtır. Yazılım geliştiricilerin bu prensibi anlamaları ve etkili bir şekilde uygulamaları, büyük ölçekli projelerde başarılı ve bakımı kolay sistemler oluşturmalarına olanak tanır.

--

--