Hansı framework-ü seçməliyəm?

Son bir neçə ayda facebook-da qruplara girəndə əsasən framework ilə əlaqədar paylaşımları daha çox görürəm. Bununla əlaqədar bir yazı yazmaq istədim. Əvvəlcə onu deyim ki, bu yazı framework müqayisəsi və ya hansının daha üstün olması haqqında deyil. “Bu nə başlıqdır yazmısan onda” dediyini eşidirəm sanki, amma mən bu yazının başlıqdan daha faydalı olacağına inanıram və hətta sonda bir-iki xırda tövsiyyələr də olacaq.

İndi isə keçək mövzuya. Paylaşımlar əsasən ya hansı framework yaxşıdır, ya da hansını öyrənim ki, gələcək iş tapmağı və pul qazanmağı asanlaşdırsın. Bu tip paylaşımların altında isə demək olarki çox vaxt “mənim framework-üm səninkini döyər” şəklində müzakirələr belə gedir. Təbii ki, seçimlər sərbəstdir və hər kəs istədiyi şeyi seçib istifadə edə bilər, amma bu rəng seçimi kimi müzakirəyə qapalı deyil. Əgər siz sehir sevir və hər şeyi öz-özünə işləməsini istəyirsinizsə, bir müddət sonra “bu niyə işləmir eee…” deyəcəyinizi və çıxan xəta barədə heç bir fikrinizin olmayacağına sizə qarantiya verə bilərəm. Və əgər siz Google sağolsun soruşub həll edərəm deyənlərdənsinizsə elə bu yazını burada oxumağı saxlaya bilərsiniz.

Qısa bir ara….

Hələ də buradasan? O zaman təcrübəmdən öyrəndiklərimi sizinlə paylaşım.

Dili öyrən onun alətlərini yox

Bu barədə uzun yazmayacam. Başlıq hər şeyi deyir. Hansısa dili istifadə edirsinizsə onun framework-lərini və ya kitabxanalarını istifadə etməyə yox onu düzgün istifadə edə bilməyə fokuslanın. Siz dili yaxşı bildiyiniz təqdirdə framework-lər sizin üçün sadəcə rahatlıqla dəyişə biləcəyiniz alət olacaq. Qısaca framework-lər gəldi gedərdir siz dilə sahib çıxın 🙂

Standartlara əməl et

Hər bir dilin müəyyən qəbul olunmuş standartları olur. Bu standartların ən əsas səbəbi ümumi bir kod yazanda eyni standartlarla yazıldığı üçün asanlıqla dəyişilə bilən olması üçündür və ya birlikdə işləyə bilməsini təşkil etməkdir. Yəni siz A kitabxanasını istifadə edirsinizsə və o həmin dilin standartlarına uyğundursa siz onu sabah bir neçə dəqiqəyə yazdığınız proqrama heç bir təsiri olmadan B kitabxanası ilə dəyişə bilərsiniz. Məsələn, PHP dilində ümumi qəbul olunmuş PSR standartları var. Deyək ki, siz Monolog kitabxanasını loqları hansısa fayla yazmaq üçün istifadə edirsiniz. Monolog kitabxanası PSR-3 standartlarına uyğun yazıldığı üçün sabah siz onu bu standartlarla yazılan istədiyiniz bir kitabxana ilə dəyişə biləriniz. Bu eyni ilə Framework-lərə də şamildir. Seçdiyiniz Framework-ün PSR standartlarına cavab verdiyinə mütləq əmin olun. Bu prinsipi sahiblənə bilsəniz Framework seçiminin nə qədər əhəmiyyətsiz olduğunu görəcəksiniz.

Özünü asılı etmə

Framework seçimlərinin insanlar üçün bu qədər əhəmiyyətli edən digər bir şey isə onların asan dəyişdirilə bilməməsinə inamdır. Bəli haqlısınızda. Framework sizi idarə etməyə icazə versəniz ondan tamamilə asılı olacaqsınız. Mənim fikrimcə ən əsas azarkeşlik elə burada başlayır. Davamlı asılılıq daha çox dibə getməyə vadar edir və siz bir müddət sonra özünüzü facebook-da framework paylaşımı altında tapırsız. Bunun qarşısını almağın ən gözəl yolu ilk bənddə bildirdiyim kimi standartlara cavab verən bir şey seçməkdir. Amma bir dəqiqə eee mən seçdiyim framework PSR standartlarına cavab verir axı. Hə təbii ki, bunu çox edir. Elə əsas məsələ də burada başlayır. Bir düzgün aləti seçmək, iki onu düzgün istifadə etmək. Bəs necə düzgün istifadə edək deyirsinizsə qısaca bir nümunə verəcəm və növbəti mərhələyə tövsiyyəyə keçəcəm çünki bu mövzuda daha ətraflı bir yazı yazmağı düşünürəm. Bu arada verəcəyim nümunə Slim framework üzərindən olacaq. Bu framework PSR standartlarına tam cavab verir, amma bunu istifadə edə bilmək sizə qalır.

Özünü asılı etdiyin kod:

class SomeController
{
  public function someAction(\Slim\Http\Response $request, \Slim\Http\Response $response) {
    // bura bəzi kodlar və
    return $response->withJson(["Salam" => "Dünya"]);
  }
}

Framework-dən asılı olmayan kod:

class SomeController
{
  public function someAction(\Psr\Http\Message\ServerRequestInterface $request, \Psr\Http\Message\ResponseInterface $response) {
    // bura bəzi kodlar və
    $response->getBody()->write(json_encode(["Salam" => "Dünya"]));
    return $response;
  }
}

Əslində birinci nümunə ilə ikinci arasında heç bir fərq yoxdur. Bu kodlar eyni nəticəni sizə verəcək, ammaaaaaaa… Bunlar arasındakı fərq gələcək də birincinin dəyişilə bilməməsidir. Yəni gələcəkdə sizə Slim əvəzinə yeni çıxan Bakı (ad nümunə üçündür) framework-ünə keçmək istəsəz o zaman sizin etməyiniz lazım olan tək şey o yeni framework-ü `composer.json` faylına əlavə etmək və onu yeniləməkdir. Təbii ki, bir neçə konfiqurasiya tələb oluna bilər, amma nəticə etibarilə siz yazığınız kodu dəyişmədən framework dəyişə bilirsiniz.

Test edilə bilən kod yazın

Test edilən bilən kod nədir? Əslində bu və ya digər şəkildə bütün kodlar test edilə biləndir. Əsas məsələ rahat və doğru yazılan testdən gedir. Misal üçün siz bazadan məlumat oxuya bilmək üçün real baza yaradıb ora məlumat əlavə etməməlisiniz. Dependency Injection istifadə edib kodu onu “mockable” yəni təqlid edilə biləcək hala salmalısınız. O zaman sizin tək ehtiyacınız olan şey kodda bazaya sorğu atan metodu “mock” edib o metodun işlənim işlənmədiyiniz yoxlayırsınız. Kod nümunəsi ehtiyac olsa bura əlavə edəcəyəm.

Aqnostik kod yazın

Əslində dediyim şeylərin hamısı gəlim bu nöqtəyə toxunur. Yuxarıda verdiyimiz Slim framework nümunəsindəki kimi “someAction” 2 haldada eyni dəyəri qəbul edir. Aralarındakı fərq isə birinci halda kodunuz Slim framework istifadə edildiyini bilir, ikinci halda isə tamamilə framework aqnostik yəni framework-dən xəbərsiz olur. Çünki sizin referans verdiyiniz sinif PSR standartları ilə yazılmış istənilən framework ola bilərəm deməkdir.

Son olaraq

Yuxarıda bəhs etdiyim kimi hansısa framework yaxşıdır mövzusu olmasa da nümunələrim Slim framework-dən oldu. Bunun xüsusi səbəbi yoxdur. Bu Slim-in ən yaxşı olduğu mənasına da gəlmir. Mənim seçimimin Slim olmasının tək səbəbi PSR standartlarına tam cavab verir və özü ilə bərabər heç bir artıq kod gətirmir (ORM, ActiveRecord, Template Engine və s.). Qısacası seçəcəyiniz framework çalışın bu standartlara uyğun olsun və ən əsası təmiz kod yazın 🙂

P.S. Ən qısa zamanda burada ətraflı yazıb uzada bilmədiyim mövzular haqqında ayrı-ayrı nümunələrlə yazı yazmağa çalışacam.

2008-ci ildən bəri proqramlaşdırma və texnologiya ilə maraqlanıram. Layihələrdə əsasən PHP (ehtiyac olduqda Python) istifadə edirəm. Son zamanlarda Maşın Öyrənilməsi sahəsində layihələr üzərində işləyirəm.

Leave a reply:

Your email address will not be published.

This site uses Akismet to reduce spam. Learn how your comment data is processed.

Site Footer