design

Laravel'de Tasarım Desenleri: Yazılım Geliştirmede İşinizi Kolaylaştıracak Desenler

March 20, 2025

1. Repository Pattern (Depo Deseni)

Repository Pattern, veri erişim katmanını uygulama mantığından ayırmak için kullanılır. Bu desen, veritabanı işlemlerini merkezi bir yerde toplar ve kodun daha modüler olmasını sağlar.

Örnek Uygulama

UserRepositoryInterface.php

php
// UserRepositoryInterface.php
interface UserRepositoryInterface {
    public function all();
    public function find($id);
    public function create(array $data);
}

// UserRepository.php
class UserRepository implements UserRepositoryInterface {
    public function all() {
        return User::all();
    }

    public function find($id) {
        return User::find($id);
    }

    public function create(array $data) {
        return User::create($data);
    }
}

// UserController.php
class UserController extends Controller {
    protected $userRepository;

    public function __construct(UserRepositoryInterface $userRepository) {
        $this->userRepository = $userRepository;
    }

    public function index() {
        $users = $this->userRepository->all();
        return view('users.index', compact('users'));
    }
} 

2. Service Layer Pattern (Servis Katmanı Deseni)

Service Layer Pattern, iş mantığını (business logic) kontrolörlerden ayırarak daha temiz ve sürdürülebilir bir kod yapısı oluşturur.

Örnek Uygulama

UserService.php

php
// UserService.php
class UserService {
    protected $userRepository;

    public function __construct(UserRepositoryInterface $userRepository) {
        $this->userRepository = $userRepository;
    }

    public function registerUser(array $data) {
        // İş mantığı burada
        $user = $this->userRepository->create($data);
        // Ek işlemler...
        return $user;
    }
}

// UserController.php
class UserController extends Controller {
    protected $userService;

    public function __construct(UserService $userService) {
        $this->userService = $userService;
    }

    public function store(Request $request) {
        $data = $request->all();
        $user = $this->userService->registerUser($data);
        return redirect()->route('users.index');
    }
} 

3. Factory Pattern (Fabrika Deseni)

Factory Pattern, nesne oluşturma işlemlerini merkezi bir yerde toplar. Bu desen, özellikle karmaşık nesne oluşturma süreçlerinde kullanışlıdır.

Örnek Uygulama

UserFactory.php

php
// UserFactory.php
class UserFactory {
    public static function create($type) {
        if ($type == 'admin') {
            return new AdminUser();
        } elseif ($type == 'member') {
            return new MemberUser();
        }
        throw new Exception("Geçersiz kullanıcı tipi");
    }
}

// UserController.php
class UserController extends Controller {
    public function create($type) {
        $user = UserFactory::create($type);
        return view('users.create', compact('user'));
    }
} 

4. Singleton Pattern (Tekil Desen)

Singleton Pattern, bir sınıfın yalnızca bir örneğinin olmasını garanti eder. Bu desen, özellikle kaynak yoğun nesneler için kullanışlıdır.

Örnek Uygulama

Logger.php

php
// Logger.php
class Logger {
    private static $instance = null;

    private function __construct() {
        // Kurucu metod private yapılarak dışarıdan örnek oluşturulması engellenir
    }

    public static function getInstance() {
        if (self::$instance == null) {
            self::$instance = new Logger();
        }
        return self::$instance;
    }

    public function log($message) {
        // Loglama işlemleri...
    }
}

// UserController.php
class UserController extends Controller {
    public function store(Request $request) {
        $logger = Logger::getInstance();
        $logger->log('Yeni kullanıcı oluşturuldu');
        // Diğer işlemler...
    }
} 

5. Observer Pattern (Gözlemci Deseni)

Observer Pattern, bir nesnenin durumu değiştiğinde bağlı olan diğer nesnelere otomatik olarak bildirim gönderir. Laravel'de bu desen, olaylar (events) ve dinleyiciler (listeners) ile uygulanır.

Örnek Uygulama

UserRegistered.php

php
// UserRegistered.php (Event)
class UserRegistered {
    public $user;

    public function __construct(User $user) {
        $this->user = $user;
    }
}

// SendWelcomeEmail.php (Listener)
class SendWelcomeEmail {
    public function handle(UserRegistered $event) {
        // Hoş geldin e-postası gönderme işlemi...
    }
}

// EventServiceProvider.php
protected $listen = [
    UserRegistered::class => [
        SendWelcomeEmail::class,
    ],
];

// UserController.php
class UserController extends Controller {
    public function store(Request $request) {
        $user = User::create($request->all());
        event(new UserRegistered($user));
        return redirect()->route('users.index');
    }
} 

Laravel, yazılım geliştirme sürecinde işinizi kolaylaştıracak birçok tasarım desenini destekler. Bu desenler, kodunuzun daha modüler, sürdürülebilir ve okunabilir olmasını sağlar. Repository Pattern, Service Layer Pattern, Factory Pattern, Singleton Pattern ve Observer Pattern gibi desenleri uygulayarak Laravel projelerinizde daha etkili ve temiz bir kod yapısı oluşturabilirsiniz.

Bu desenleri doğru bir şekilde kullanarak, hem geliştirme sürecinizi hızlandırabilir hem de projelerinizin uzun vadede daha kolay yönetilebilir olmasını sağlayabilirsiniz. Laravel'in sunduğu esneklik ve güçlü yapısı sayesinde, bu tasarım desenlerini uygulamak oldukça kolaydır.

4 + 7 =