Merhabalar,
Yaklaşık 6-7 aydır Laravel ile backend uygulamaları geliştiriyorum. İlk MVC tecrübemdir Laravel. MVC yapısını kavradığımı düşünüyorum fakat kafamda oturmayan bazı şeyler var.
Laravel ile temiz ve geliştirilebilir kod nasıl yazılır? SOLID kurallarına nasıl uyulur? Çok genel bir soru biliyorum, biraz daha açmak adına örnek üzerinden gitmek istiyorum.
Bir uygulama düşünelim ve içinde
- users
- posts
- notifications
- subscriptions
tabloları bulunsun. Bir kullanıcı post oluşturduğunda sırasıyla
- Posts tablosuna ekleme
- Postu paylaşan kişinin abonelerini (subscriptions tablosundan) bulmak
- Abonelerin adına bu postun bildirimi notifications tablosuna eklenmesi
olayları gerçekleşsin. Tabi bahsettiğim senaryo oldukça basit farkındayım. Normalde bir PostController içinde post u oluşturup daha sonra subscriptions tablosundan authenticate olmuş kullanıcıya ait diğer kullanıcıları yakalayıp daha sonra notf. tablosuna gerekli bildirimleri ekleyebilirim. Ben bu işlemi (büyük bir projeymiş gibi düşünürsek) daha parçalayarak, daha mikro şekilde yazarak gerçekleştirmek istiyorum.
Biraz araştırma yaptığımda Repository Pattern ile karşılaştım. İlk başta dedim "tam aradığım şey" ama sonradan farkettim ki burada yaptığım şeyi zaten ORM bana sunuyor. Bu desenin bana kattığı pek bir şey yok. Ki benim gibi düşünen, repository patternin gereksiz olduğunu söyleyen ve bunun hakkında makale yazan yerli ve yabancılara da rastladım. Hepsini geçtim, Controller için construct içinde repository interface ataması yapılıyor. Yukardaki örnek için benim 3 tane repoyu construct içinde mi tanımlamam lazım? Eğer öyleyse daha saçma değil mi?
Diğer taraftan Service Layer var. Ne olduğunu asla anlamadım. Repository ile kullananlarda var. Tek başına kullananlarda var. Herkes farklı kullanıyor. Kafam çok karışıyor dolayısıyla.
Sonuç olarak,
Programlamaya, web geliştirmeye yeni başlamış birisi değilim. Yazdıklarımdan öyle anlaşılabilir diye eklemek istedim. Sadece işimde gerçekten iyi olmak istiyorum. OOP yi daha iyi kavramak istiyorum. Projelerimi diğer insanlarla beraber çalışabileceğim şekilde geliştirmek istiyorum. 2 Farklı şirkette çalıştım ve Laravel kullandım tek yazılımcı olmam dışında sorun yoktu 😃 Sanırım fazla uzattım. Tavsiyelerinizi (mümkünse kısa açıklamalar veya kaynaklar veya örnek projeleriniz varsa onlar ile) bekliyorum.