Welcome to XFSkins | XenForo Themes, Styles and Plugins

Join the community to start discussions, follow updates and connect with other members.

Rehber Xenforo Entity, Repository ve Service Mantığı: Geliştiriciler İçin Temel Mimari Rehberi

Bu konu bir rehber veya adım adım açıklama içermektedir.
🟢 Konu yazarı şu anda aktif

XFSkins

Administrator
Yönetici
Kodcu Tasarımcı Geliştirici
Katılım
8 Ocak 2026
Mesajlar
306
Çözümler
1
Reaksiyon puanı
413
Puanları
63
XenForo Entity, Repository ve Service Mantığı
Geliştiriciler için temel mimari rehberi

Bu rehber XenForo 2.3.10 sürümüne göre hazırlanmıştır. XenForo geliştirme mimarisinde Entity, Repository ve Service katmanları çok önemli bir yere sahiptir.

Bu üç yapıyı doğru anlamak, daha temiz, test edilebilir ve güncelleme dostu add-on geliştirmeyi sağlar.

1. Entity Nedir?​


Entity, veritabanındaki bir kaydın PHP tarafındaki karşılığıdır. Kullanıcı, konu, mesaj, forum gibi birçok yapı entity olarak temsil edilir.

Entity genellikle şunları içerir:

  • Tablo adı.
  • Kolon tanımları.
  • İlişkiler.
  • Getter metodları.
  • Pre-save ve post-save davranışları.

Örnek entity bulma:

Kod:
$user = \XF::em()->find('XF:User', 1);

2. Finder Nedir?​


Finder, veritabanı sorgularını zincirleme şekilde yazmayı sağlar.

Kod:
$threads = \XF::finder('XF:Thread')
    ->where('discussion_state', 'visible')
    ->order('post_date', 'DESC')
    ->limit(10)
    ->fetch();

Finder, doğrudan SQL yazmadan XenForo standartlarına uygun sorgu oluşturmanıza yardımcı olur.

3. Repository Nedir?​


Repository, veri erişimi ve tekrar kullanılabilir sorgu mantığı için kullanılır. Karmaşık finder sorguları controller içinde dağılmak yerine repository içinde toplanmalıdır.

Örnek kullanım:

Kod:
$repo = \XF::repository('XF:Thread');

Kendi add-on’unuzda repository oluşturduğunuzda, aynı sorgu mantığını farklı controller veya service sınıflarında tekrar kullanabilirsiniz.

4. Service Nedir?​


Service, çok adımlı iş süreçlerini yönetir. Örneğin konu oluşturma, mesaj hazırlama, kullanıcı kaydı, bildirim gönderme gibi işlemler service katmanında yürütülebilir.

Örnek mantık:

Kod:
$creator = \XF::service('XF:Thread\\Creator', $forum);
$creator->setContent($title, $message);

Service kullanmak, controller’ı sade tutar ve iş mantığını daha düzenli hale getirir.

5. Controller Ne Yapmalı?​


Controller mümkün olduğunca ince kalmalıdır.

  • Request verisini alır.
  • Gerekli entity veya service’i çağırır.
  • Yetki kontrollerini yapar.
  • View veya redirect döndürür.

Controller içine büyük SQL sorguları veya uzun iş mantığı yazmak bakım maliyetini artırır.

6. Katmanların Doğru Sorumlulukları​


Entity: Tek bir kaydın veri yapısı ve temel davranışı.

Finder: Sorgu oluşturma.

Repository: Tekrar kullanılabilir veri erişim mantığı.

Service: Çok adımlı iş süreci.

Controller: HTTP isteğini yönetme ve sonucu döndürme.

7. Kötü ve İyi Yaklaşım​


Kötü yaklaşım:

  • Controller içinde uzun SQL yazmak.
  • Aynı sorguyu birçok yerde tekrar etmek.
  • Kayıt oluşturma adımlarını dağınık şekilde yapmak.

İyi yaklaşım:

  • Sorgu tekrarını repository’ye taşımak.
  • Çok adımlı kayıt işlemini service ile yapmak.
  • Entity ilişkilerini kullanmak.
  • Controller’ı sade tutmak.

8. Entity Relation Örneği​


Bir thread entity’si üzerinden forum ilişkisine erişebilirsiniz.

Kod:
$thread = \XF::em()->find('XF:Thread', $threadId);
$forum = $thread->Forum;

Bu yaklaşım, XenForo’nun entity ilişki sisteminden faydalanır.

9. Sık Yapılan Hatalar​


  • Her şeyi controller içine yazmak.
  • Repository yerine kopyala-yapıştır finder kullanmak.
  • Service yerine yarım manuel kayıt oluşturmak.
  • Entity ilişkilerini bilmeden gereksiz sorgular yazmak.
  • Pre-save hatalarını kontrol etmeden kayıt yapmak.



Özet: Entity, Repository ve Service katmanlarını doğru kullanmak XenForo add-on geliştirmede temiz mimarinin temelidir. Kodunuz büyüdükçe bu ayrım çok daha değerli hale gelir.​
 
Geri
Üst