Laravel Türkiye Discord Kanalı Forumda kod paylaşılırken dikkat edilmesi gerekenler!Birlikte proje geliştirmek ister misiniz?
  • [silindi]

  • Düzenlendi

Merhaba dostlar benim merak ettiğim fakat kendim tutup ta test yapmadığım bir konu var.
Sorum şu, Bir sayfa içerisinde iki farklı class component içerisinde aynı category bilgilerini elequent ile çektiğimizi varsayalım. Page Load esnasında Laravel aynı query yi her iki component için iki kez mi çalıştırır ?
Bilen tercrübe eden oldu mu bu konuyu. Seperation of Concerns olarak beni çok tedirgin ediyor. Apollo ve GraphQL bunu başarmış bu mekanizma otomatik kurgulanıyor ve aynı sorgu iki kez tekrarlanmıyor. Laravel'de acaba durum nedir. Class Component kullanmak çok işime yarayabilir eğer durum Apollo'daki gibi ise değilse çok anlamsız eksik bir component mantığı yazmışlar demektir.

  • mgsmus bunu yanıtladı.
    • En İyi Yanıt

    [silindi] Laravel kullanarak bir eticaret platformu yazdığınızı düşünün. Bu platform, bir framework şeklinde geliştiricilere hitaben yazılmış bir ürün. Adı da Atlas olsun, Atlas Ecommerce Platform. Spesifik bir amacı var, bizim gibi geliştiriciler Atlas'ı kullanarak eticaret uygulamaları geliştirebiliyorlar. Atlas kendi başına bir anlam ifade etmiyor, kendi başına kur çalıştır bir uygulama değil, onu kullanarak sizin bir uygulama geliştirmeniz gerekiyor, bir framework. İçerisinde bir ton özellik var, bunlardan biri de component. Laravel'de hazır bir state yapısı yok, Cache kullanarak biz yapıyoruz. Siz de bunu bildiğiniz için Atlas kullanan geliştiriciler için mevcut Component sınıfını miras alan yeni bir yapı yazdınız. Adı da StatefulComponent. Dokümanlarda da dediniz ki:

    Stateful Component
    Normal component ile aynı özelliklere sahip ama önbelleğe aldındığı için aynı sayfada birden fazla kullanıldığında sorgular birden fazla çalışmaz. İçerisinde sorgu bulunan bir component varsa ve birden fazla kez kullanıyorsanız bu component ile performans artışı sağlayabilirsiniz.

    Çok güzel. Şimdi bir geliştirici Laravel forumlarına geldi ve sordu:

    Sorum şu, Bir sayfa içerisinde iki farklı class component içerisinde aynı category bilgilerini elequent ile çektiğimizi varsayalım. Page Load esnasında Laravel aynı query yi her iki component için iki kez mi çalıştırır ?
    Bilen tercrübe eden oldu mu bu konuyu. Seperation of Concerns olarak beni çok tedirgin ediyor. Atlas Ecommerce Platform bunu StatefulComponent adıyla başarmış bu mekanizma otomatik kurgulanıyor ve aynı sorgu iki kez tekrarlanmıyor. Laravel’de acaba durum nedir. Class Component kullanmak çok işime yarayabilir eğer durum Apollo’daki gibi ise değilse çok anlamsız eksik bir component mantığı yazmışlar demektir.

    Nasıl bir cevap verirdiniz 🙂

    Apollo platformunda bu tür özelliklerin olup Laravel'de olmaması normal. Class component içerisinde Cache kullanarak state'i siz oluşturacaksınız. Apollo platformunun amacı belli olduğu için bu tür yapıları entegre etmiş. Diğer taraftan Laravel genel amaçlı bir web framework, o yüzden bu tür spesifik özelliklerin olmaması onun yerine bu özellikleri geliştirebileceğiniz bileşenlerin olması normal. Laravel'i kendi işinize yardımcı olsun diye kullanmıyorsunuz, kendi işinizi onunla oluşturuyorsunuz.

    Örnek olarak da:

    public function render()
    {
        $users = Cache::rememberForever('active-users-select', function () {
            return User::active()
                ->orderBy('name')
                ->get();
        });
        
        return view('components.active-users-select', compact('users'));
    }
    • mgsmus

      Seviye 1384
    • Düzenlendi
    • En İyi Yanıt

    [silindi] Laravel kullanarak bir eticaret platformu yazdığınızı düşünün. Bu platform, bir framework şeklinde geliştiricilere hitaben yazılmış bir ürün. Adı da Atlas olsun, Atlas Ecommerce Platform. Spesifik bir amacı var, bizim gibi geliştiriciler Atlas'ı kullanarak eticaret uygulamaları geliştirebiliyorlar. Atlas kendi başına bir anlam ifade etmiyor, kendi başına kur çalıştır bir uygulama değil, onu kullanarak sizin bir uygulama geliştirmeniz gerekiyor, bir framework. İçerisinde bir ton özellik var, bunlardan biri de component. Laravel'de hazır bir state yapısı yok, Cache kullanarak biz yapıyoruz. Siz de bunu bildiğiniz için Atlas kullanan geliştiriciler için mevcut Component sınıfını miras alan yeni bir yapı yazdınız. Adı da StatefulComponent. Dokümanlarda da dediniz ki:

    Stateful Component
    Normal component ile aynı özelliklere sahip ama önbelleğe aldındığı için aynı sayfada birden fazla kullanıldığında sorgular birden fazla çalışmaz. İçerisinde sorgu bulunan bir component varsa ve birden fazla kez kullanıyorsanız bu component ile performans artışı sağlayabilirsiniz.

    Çok güzel. Şimdi bir geliştirici Laravel forumlarına geldi ve sordu:

    Sorum şu, Bir sayfa içerisinde iki farklı class component içerisinde aynı category bilgilerini elequent ile çektiğimizi varsayalım. Page Load esnasında Laravel aynı query yi her iki component için iki kez mi çalıştırır ?
    Bilen tercrübe eden oldu mu bu konuyu. Seperation of Concerns olarak beni çok tedirgin ediyor. Atlas Ecommerce Platform bunu StatefulComponent adıyla başarmış bu mekanizma otomatik kurgulanıyor ve aynı sorgu iki kez tekrarlanmıyor. Laravel’de acaba durum nedir. Class Component kullanmak çok işime yarayabilir eğer durum Apollo’daki gibi ise değilse çok anlamsız eksik bir component mantığı yazmışlar demektir.

    Nasıl bir cevap verirdiniz 🙂

    Apollo platformunda bu tür özelliklerin olup Laravel'de olmaması normal. Class component içerisinde Cache kullanarak state'i siz oluşturacaksınız. Apollo platformunun amacı belli olduğu için bu tür yapıları entegre etmiş. Diğer taraftan Laravel genel amaçlı bir web framework, o yüzden bu tür spesifik özelliklerin olmaması onun yerine bu özellikleri geliştirebileceğiniz bileşenlerin olması normal. Laravel'i kendi işinize yardımcı olsun diye kullanmıyorsunuz, kendi işinizi onunla oluşturuyorsunuz.

    Örnek olarak da:

    public function render()
    {
        $users = Cache::rememberForever('active-users-select', function () {
            return User::active()
                ->orderBy('name')
                ->get();
        });
        
        return view('components.active-users-select', compact('users'));
    }
      • [silindi]

      mgsmus Laravel Cache'in böyle şeylerde de kullanıldığını ilk kez görüyorum. Laravel kullanıcıları olarak şanslıyız, farklı platformlarda bu işler biraz daha maliyetli, bir projemde bu işlemleri tüm servisler için. RxJS ile kendim yazmak zorunda kalmıştım çok zaman alıyor. Laravel Cache dökümanını iyice inceleyeyim. Detaylı anlatımınız için teşekkürler Mustafa Hocam 🙏