aghabalaguluzade
Script oluşturmasının 2 sebebi var;
- Sürekli çalıştırılan komutları tek bir yerde birleştirmek.
- CI/CD kullanarak otomatik deployment gerçekleştirdiğimizde bu komutlar sürekli çalıştırılır. Her deploymentdan önce ya da sonra çalışmasını istediğimiz komutları bu şekilde bash script olarak yazar ve CI/CD aşamasına ekleriz. Böylece deployment sırasında istediğimiz komutlar otomatik çalışır.
declare(strict_types=1)
Bu direktif dosyanın en başına php tagı açıldıktan sonra hemen yazılır. Amacı PHP tarafından basit tiplerin otomatik dönüşümünü engelleyerek hatalı sonuç alınmasını engellemek içindir. Örnek vermek gerekirse:
<?php
function sum(int $x, int $y): int
{
return $x + $y;
}
// Size 3 verir çünkü php "2"'yi int olarak dönüştirebiliyorsa dönüştürür.
// Yani 2 olarak ele alır ve 1+2 şeklinde işlenir. Eğer 2.3 verseydiniz size
// 3.3 değil yine 3 verecekti çünkü 2.3 integer olarak ele alındığında en
// yakın değer 2 olur, hata yapmış olursunuz.
echo sum(1, "2");
Şu şekilde yaparsanız:
<?php declare(strict_types=1);
function sum(int $x, int $y): int
{
return $x + $y;
}
// Burada hata alırsınız çünkü "2" bir integer değil string ifadedir.
// Tırnak içinde yazılmaması gerekir.
echo sum(1, "2");
Şu konuda yazdıklarımı okuyun: https://laravel.gen.tr/d/4907-php-hakkinda/2
toSQL büyük ihtimalle kendisi kullanmak için yazdığı bir yöntemdir. Genel kullanılan ya da bilinen bir şey değil, kendi uydurmuş.
Mapper dediğimiz bir veriyi bir başka bir tipe çevirmek için yardımcı bir sınıf, bir tasarım deseni. Anlamlı olsun diye de adına Mapper eklemiş:
https://designpatternsphp.readthedocs.io/en/latest/Structural/DataMapper/README.html
StudentService dediğimiz de bir tasarım deseni. Belli yöntemleri bir bağlam (burada Student oluyor) altında toplamak için OOP dillerde kullanılır. İçerisinde sadece Student ile ilgili işlemlerin olduğu bir sınıf gibi düşünebilirsiniz, organize etmiş oluyorsunuz ve istediğiniz zaman istediğiniz yerde çağırarak kod çoğalmasını engellemiş oluyorsunuz.
StudentController dediğimiz bir controller, yani genellikle gelen bir isteği karşılayan ve iş yaptıran sınıf. MVC dediğimiz Model-View-Controller tasarım desenindeki Controller'dır. Laravel kullanıp da bunu bilmemeniz garip olurdu çünkü Laravel'de en çok kullanılan sınıf budur.
https://laravel.com/docs/10.x/controllers
StudentsValidator kısmında ise validasyon işlemini ayrı bir sınıfta yapmak istemiş, kod organizasyonu içindir diye tahmin ediyorum. Java ya da C# gibi OOP dillerde bu ayrıştırma çok kullanılır. Gerek var mı? Bence yok çünkü adam içeriye çok spesifik bir kod yazmış. Bunu belki bir ya da iki yerde kullanır.
StudentsRepository dediği Repository pattern. Service gibi ama bu sefer bağlam veri tabanı olmuş oluyor. Bir kaynak (Student) üzerinde yapılabilecek veri tabanı işlemlerini ayrı bir sınıfta toplayarak hem organize etmiş oluyorsunuz hem de kod tekrarı yapmadan dilediğiniz yerde kullanıyorsunuz. Başka sebebleri de var elbette ama onları araştırırken öğrenirsiniz, şimdi kafa karıştırmaya gerek yok.
https://designpatternsphp.readthedocs.io/en/latest/More/Repository/README.html
Yazdıklarınıza bakarak eksiklerinizi ve öğrenmeniz gereken şeyleri sıralıyorum:
- OOP nedir?
- SOLID nedir?
- Tasarım desenleri (design patterns) nedir?