Yazılım Geliştirme

Clean Code Mimarisi: Örnek Proje ile Uygulamalı Anlatım

Bu bölümde, Clean Code Mimarisi’nin temel prensiplerini bir örnek proje üzerinden uygulamalı olarak anlatacağız. Projemizde basit bir kullanıcı yönetim sistemi geliştireceğiz. Bu sistem, kullanıcı ekleme, listeleme ve silme işlemlerini içerecek.

Proje Yapısı

Örnek projemiz şu katmanlardan oluşacak:

  1. Presentation Layer: Kullanıcı arayüzü ve kullanıcıdan veri alımı.
  2. Application Layer: Uygulama iş akışını yönetir.
  3. Domain Layer: Temel iş mantığını içerir.
  4. Infrastructure Layer: Veri erişim katmanı.

1. Proje Dizini

CleanCodeArchitectureExample/
├── Presentation/
│   └── UserInterface.cs
├── Application/
│   └── UserService.cs
├── Domain/
│   └── User.cs
├── Infrastructure/
│   └── UserRepository.cs
├── Program.cs
└── CleanCodeArchitectureExample.csproj

2. Domain Katmanı (Domain Layer)

İlk olarak, kullanıcıyı temsil edecek User sınıfını oluşturuyoruz.

// Domain/User.cs
namespace CleanCodeArchitectureExample.Domain
{
    public class User
    {
        public int Id { get; set; }
        public string Name { get; set; }
        public string Email { get; set; }
    }
}

3. Veri Erişim Katmanı (Infrastructure Layer)

Kullanıcı verilerini yönetecek UserRepository sınıfını oluşturuyoruz.

// Infrastructure/UserRepository.cs
using CleanCodeArchitectureExample.Domain;
using System.Collections.Generic;

namespace CleanCodeArchitectureExample.Infrastructure
{
    public class UserRepository
    {
        private readonly List<User> _users = new List<User>();

        public void AddUser(User user)
        {
            _users.Add(user);
        }

        public List<User> GetAllUsers()
        {
            return _users;
        }

        public void RemoveUser(int userId)
        {
            var user = _users.Find(u => u.Id == userId);
            if (user != null)
            {
                _users.Remove(user);
            }
        }
    }
}

4. Uygulama Katmanı (Application Layer)

Uygulama iş akışını yönetecek UserService sınıfını oluşturuyoruz.

// Application/UserService.cs
using CleanCodeArchitectureExample.Domain;
using CleanCodeArchitectureExample.Infrastructure;
using System.Collections.Generic;

namespace CleanCodeArchitectureExample.Application
{
    public class UserService
    {
        private readonly UserRepository _userRepository;

        public UserService()
        {
            _userRepository = new UserRepository();
        }

        public void CreateUser(string name, string email)
        {
            var user = new User
            {
                Id = new System.Random().Next(1, 1000), // Sadece örnek için rastgele ID
                Name = name,
                Email = email
            };
            _userRepository.AddUser(user);
        }

        public List<User> GetUsers()
        {
            return _userRepository.GetAllUsers();
        }

        public void DeleteUser(int userId)
        {
            _userRepository.RemoveUser(userId);
        }
    }
}

 

5. Sunum Katmanı (Presentation Layer)

Kullanıcı ile etkileşimi sağlayacak UserInterface sınıfını oluşturuyoruz.

// Presentation/UserInterface.cs
using CleanCodeArchitectureExample.Application;
using System;

namespace CleanCodeArchitectureExample.Presentation
{
    public class UserInterface
    {
        private readonly UserService _userService;

        public UserInterface()
        {
            _userService = new UserService();
        }

        public void ShowMenu()
        {
            while (true)
            {
                Console.WriteLine("1. Kullanıcı Ekle");
                Console.WriteLine("2. Kullanıcıları Listele");
                Console.WriteLine("3. Kullanıcı Sil");
                Console.WriteLine("4. Çıkış");
                var choice = Console.ReadLine();

                switch (choice)
                {
                    case "1":
                        AddUser();
                        break;
                    case "2":
                        ListUsers();
                        break;
                    case "3":
                        DeleteUser();
                        break;
                    case "4":
                        return;
                    default:
                        Console.WriteLine("Geçersiz Seçim");
                        break;
                }
            }
        }

        private void AddUser()
        {
            Console.WriteLine("Kullanıcı Adı:");
            var name = Console.ReadLine();
            Console.WriteLine("Kullanıcı E-postası:");
            var email = Console.ReadLine();
            _userService.CreateUser(name, email);
            Console.WriteLine("Kullanıcı eklendi!");
        }

        private void ListUsers()
        {
            var users = _userService.GetUsers();
            foreach (var user in users)
            {
                Console.WriteLine($"ID: {user.Id}, Ad: {user.Name}, E-posta: {user.Email}");
            }
        }

        private void DeleteUser()
        {
            Console.WriteLine("Silmek istediğiniz kullanıcının ID'si:");
            var userId = int.Parse(Console.ReadLine());
            _userService.DeleteUser(userId);
            Console.WriteLine("Kullanıcı silindi!");
        }
    }
}

6. Program Dosyası (Program.cs)

Son olarak, program giriş noktasını oluşturuyoruz.

// Program.cs
using CleanCodeArchitectureExample.Presentation;

namespace CleanCodeArchitectureExample
{
    class Program
    {
        static void Main(string[] args)
        {
            var ui = new UserInterface();
            ui.ShowMenu();
        }
    }
}

Çalışma Akışı

Bu yapı ile kullanıcı arayüzü, uygulama katmanı, domain katmanı ve veri erişim katmanı birbirinden bağımsız olarak çalışır. Bu sayede her bir katman kolayca değiştirilebilir ve genişletilebilir.

Sonuç

Bu örnek proje, Clean Code Mimarisi’nin temel prensiplerini ve katmanlarını uygulamalı olarak gösterir. Proje yapısının modülerliği, bağımsızlığı ve test edilebilirliği sayesinde yazılım geliştirme süreci daha verimli ve sürdürülebilir hale gelir. Bu yaklaşımı kendi projelerinize uygulayarak, kod kalitenizi ve yazılım projelerinizin başarısını artırabilirsiniz.

Bir yanıt yazın

E-posta adresiniz yayınlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir