Diyelim ki bir CRUD işlemi yaptığımda veya bir ilişkiyi belirli bir şekilde değiştirdiğimde başka bir şey yapmak istiyorum. Örneğin, bir kişi her yayın gönderdiğinde, analiz için bir tabloya bir şeyler kaydetmek istiyorum. Belki en iyi örnek değil ama genel olarak bu "gruplandırılmış" işlevselliklerin çoğu var.
Normalde bu tip mantığın kontrolörlere konulduğunu görüyorum. Bu işlevselliği birçok yerde yeniden oluşturmak istediğinize kadar bu bir züppe. Kısmi parçalara girmeye, bir API oluşturmaya ve kukla içerik oluşturmaya başladığınızda, şeyleri KURU tutmakla ilgili bir sorun haline gelir.
Bunu yönetmek için gördüğüm yollar olaylar, depolar, kütüphaneler ve modellere ekleme. İşte her biri benim anlayışlarım:
Hizmetler: Burası çoğu insanın muhtemelen bu kodu koyacağı yerdir. Hizmetlerle ilgili asıl sorunum, bazen belirli işlevler bulmak zor ve insanların Eloquent kullanmaya odaklandıklarında unutuldukları hissediyorum. publishPost()
Sadece yapabildiğimde kütüphanedeki bir yöntemi çağırmam gerektiğini nasıl bilebilirim $post->is_published = 1
?
Bu iyi çalışır görmek tek koşul SADECE hizmetleri (ve ideal bir şekilde Eloquent erişilemez bir şekilde hep birlikte denetleyicileri yapmak) olmasıdır.
Nihayetinde, istekleriniz genellikle model yapınızı takip ederse, bu bir sürü ekstra gereksiz dosya yaratacaktır.
Depolar: Anladığım kadarıyla bu temelde bir hizmet gibidir, ancak bir arayüz var, böylece ihtiyacım olmayan ORM'ler arasında geçiş yapabilirsiniz.
Olaylar: Bunu bir anlamda en zarif sistem olarak görüyorum çünkü model olaylarınızın her zaman Eloquent yöntemlerinde çağrıldığını biliyorsunuz, böylece kontrol cihazlarınızı normalde yaptığınız gibi yazabilirsiniz. Bunların yine de dağınık olduğunu görebiliyorum ve herhangi birinin kritik bağlantı için olayları kullanan büyük projelerden örnekleri varsa görmek istiyorum.
Modeller: Geleneksel olarak CRUD yapan ve eleştirel bağlantıyı ele alan derslerim olurdu. Bu aslında işleri kolaylaştırdı çünkü CRUD + çevresindeki tüm işlevsellikleri biliyordunuz.
Basit, ama MVC mimarisinde bu normalde gördüğüm şey değil. Bir anlamda, hizmetleri biraz daha tercih ettiğimden ve takip edilmesi gereken daha az dosya olduğu için bunu hizmetleri tercih etsem de. Yine de biraz dağınık olabilir. Bu yönteme ve neden çoğu insanın bunu yapmadığına dair düşüşler duymak istiyorum.
Her yöntemin avantajları / dezavantajları nelerdir? Bir şey mi kaçırıyorum?