ac1919 bu iyiydi ama malesef öyle değil. Sadece crud yaptığınız bir proje ise zaten gerek yok. Controller lar neredeyse repository gibi temiz ve sade kalır.
Ama bizim bir projemizden bir örnek vereyim.
Bir contact oluşturmanın 4 tane yolu var, manuel ekleme, csv upload ile ekleme, 3.parti servislerin eklemesi, sistemin kendi kendine eklemesi.
Bunların hepsinin farklı beklentileri var farklı validasyonları var, farklı bağımlılıkları var ama neticede hepsi contacts tablosuna ve bununla ilişkili tablolara contact ekliyor.
Sonra bunları logluyor, aynı zamanda elasticsearch ile senkronize ediyor. Ayrıca mongodb de takip etmek için başka bir kayıt oluşturuyor.
Bunu bir controllerda yaparsak 500 satır kodumuz olur bir metodda. Ayrıca asla test yazamayız.
Fakat repositorymizde bu case lerin hepsini parçalamış şekilde tüm caseleri yakalayacak şekilde saklıyoruz. Bizim controller ise sadece
return $userRepository->create($data);
işini yapıyor. Ayrıca csv ile contact import eden sınıfta da $userRepository->create($data)
diyoruz. Tek bir satır bile fazladan birşey yapmıyoruz.
Hem controller a test yazabiliriz artık, hem de repository içindeki farklı alanlara. Bazen bu forumda sorular geliyor bir controller içerisindeki metodu başka bir controllerda nasıl kullanırım diye. İşte bunu yapmamak için repository kullanıyoruz.