20.02.2024

2

Beğenme

199

Görüntülenme

Laravel Service Container

Laravel Service Container

Laravel, modern PHP uygulama geliştirme için vazgeçilmez bir araç haline geldi. Bu popüler web çerçevesi, geliştiricilere bir dizi güçlü araç sağlar. Anahtar araçlardan biri Laravel'in temel prensibi olan “Hizmet Konteyneridir”. Bu yazımızda Laravel servis konteynerinin ne olduğunu, neden önemli olduğunu ve nasıl kullanıldığını araştıracağız.


Depo modeli, veritabanı işlemlerini soyutlamak ve uygulama kodunu veritabanı ayrıntılarından bağımsız hale getirmek için kullanılır. Bu model, uygulama kodunun soyut bir arayüz (depo) aracılığıyla veritabanı işlemleriyle etkileşime girmesini sağlar. Depo modelinin bazı avantajları şunlardır:

Veri Kaynağının Soyutlanması (Abstraction of the Data Source):
Depo, uygulama kodunun veritabanını doğrudan manipüle etmek yerine soyut bir arayüz üzerinden veritabanı işlemlerini gerçekleştirmesine izin verir. Bu, uygulama kodunun veritabanı ayrıntılarına bağımlılığını azaltır.


Test Kolaylığı (Ease of Testing):
Depo deseni, uygulama kodunu veritabanı işlemlerinden izole eder. Bu, uygulama kodunu test etmeyi kolaylaştırır çünkü sahte veya taklit depoları kullanarak veritabanı bağlantılarını simüle etmeyi sağlar.


Daha Temiz ve Okunabilir Kod (Cleaner and Readable Code):
Doğrudan veritabanı işlemleriyle uğraşmamak, uygulama kodunu daha temiz ve daha okunabilir hale getirir. İş mantığı, veritabanı erişiminden ayrı tutulur, bu da kod bakımını ve geliştirmeyi kolaylaştırır.


Değişiklik Yönetimi (Change Management):
Veritabanı değişiklikleri depo katmanıyla sınırlıdır. Veritabanı teknolojisinde veya yapılarında değişiklikler olduğunda, bunlar yalnızca depo katmanını etkiler ve uygulama koduna minimal etki yapar.


Yeniden Kullanılabilirlik (Reusability):
Aynı depo arayüzü farklı veritabanları veya depolama sistemleri için uygulanabilir. Bu, uygulamanın gelecekteki gereksinimlere adapte olmasını sağlar ve daha fazla esneklik sağlar.


İş Mantığı ve Veritabanı Erişiminin Ayrılması (Separation of Business Logic and Database Access):
Depo deseni, iş mantığı ile veritabanı erişimini ayırır. Bu modüler yaklaşım, uygulamayı daha esnek hale getirir, çünkü iş mantığındaki değişiklikler veya farklı bir veritabanı teknolojisine geçiş sadece ilgili depo sınıfının güncellenmesini gerektirir.

Depo deseni, özellikle büyük ve karmaşık uygulamalarda veritabanı işlemlerini düzenlemek ve yönetmek için yaygın olarak kullanılmaktadır. Uygulama mantığını veritabanı ayrıntılarından izole ederek daha temiz, daha bakımı kolay ve dayanıklı bir kod oluşturmayı teşvik eder.


Modelimizde ve Geçiş Dosyası Örneğimizde oluşturalım:

php artisan make:model Models\User -m

Bu komut, App/Models/User.php model dosyasını oluşturur ve '-m', aynı zamanda create_users_table.php geçiş dosyasını da oluşturduğu anlamına gelir.


Repository Oluştur:
UserRepository, veritabanı işlemlerini gerçekleştirecek bir sınıftır.

// app/Repositories/UserRepository.php

namespace App\Repositories;

use App\Models\User;

class UserRepository
{
public function getAllUsers()
{
return User::all();
}

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

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

Yukarıda yaptığımız şeylere bir göz atalım. UserRepository sınıfında, tüm kullanıcıları getiren, belirli bir kullanıcıyı kimliğine göre getiren ve yeni bir kullanıcı oluşturan yöntemler bulunmaktadır.


UserRepository to Service Container Eklemek:
UserRepository'yi Laravel'in hizmet konteynerine eklemek için AppServiceProvider'ı kullanıyoruz.


// app/Providers/AppServiceProvider.php

namespace App\Providers;

use Illuminate\Support\ServiceProvider;
use App\Repositories\UserRepository;

class AppServiceProvider extends ServiceProvider
{
public function register()
{
$this->app->bind(UserRepository::class, function ($app) {
return new UserRepository();
});
}

// You can add other methods here
}

Burada, UserRepository sınıfını Laravel'in hizmet konteynerine bağlıyoruz.


Örnek bir Controller oluşturalım:
Şimdi, UserRepository'yi kullanarak kullanıcı işlemlerini yöneten bir UserController sınıfı oluşturalım.


// app/Http/Controllers/UserController.php

namespace App\Http\Controllers;

use App\Repositories\UserRepository;

class UserController extends Controller
{
protected $userRepository;

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

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

public function show($id)
{
// Get and display a specific user
$user = $this->userRepository->getUserById($id);
return view('users.show', compact('user'));
}

public function create()
{
// see creating form
return view('users.create');
}

public function store()
{
// Create new user using data from the form
$data = request()->validate([
'first_name' => 'required',
'last_name' => 'required',
]);

$this->userRepository->createUser($data);

return redirect('/users');
}
}

İşte UserController sınıfı, UserRepository'yi kurucu yöntem aracılığıyla inject eder ve ardından bu depo aracılığıyla kullanıcıları listeleyen, belirli bir kullanıcıya işaret eden ve yeni bir kullanıcı oluşturan yöntemleri içerir.

Bu adımlar, Laravel hizmet konteynerini kullanarak ve ayrıca depo desenini uygulayarak bir kullanıcı yönetimi uygulaması oluşturmanıza yardımcı olmalıdır.

Object Oriented Programming

Yorumlar

Kullanıcı yorumlarını görüntüleyebilmek için kayıt olmalısınız!

Fatih Tuzlu

Konum

Denizli, TR

Eğitim

Kontrol ve Otomasyon Teknolojisi - Akdeniz Üniversitesi

Mekatronik Mühendisliği - Pamukkale Üniversitesi

İş Tecrübesi

PHP Web Developer - Freelance

Backend Developer - Kodpit

Backend Developer - Çekirdekod

Backend Developer - Sepetde.com

Fullstack Developer - Kobikom Telekominasyon AŞ

Fullstack Developer - Akrasoftware

© 2021 Patika Dev

facebook
twitter
instagram
youtube
linkedin

Disclaimer: The information /programs / events provided on https://patika.dev and https://risein.com are strictly for upskilling and networking purposes related to the technical infrastructure of blockchain platforms. We do not provide financial or investment advice and do not make any representations regarding the value, profitability, or future price of any blockchain or cryptocurrency. Users are encouraged to conduct their own research and consult with licensed financial professionals before engaging in any investment activities. https://patika.dev and https://risein.com disclaim any responsibility for financial decisions made by users based on information provided here.