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.
UserRepositoryInterface.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'));
}
}
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.
UserService.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');
}
}
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.
UserFactory.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'));
}
}
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.
Logger.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...
}
}
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.
UserRegistered.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.