<p>config('site.author.name') aracılığıyla erişilir — asla kontrolcüler arasında dağılmış bir dize değil.</p>

<h2>
  <a name="principle-6-seo-as-a-firstclass-service" href="#principle-6-seo-as-a-firstclass-service">
  </a>
  Prensip 6: SEO'yu Birinci Sınıf Bir Hizmet Olarak Ele Almak
</h2>

<p>SEO, bir arka plan düşüncesi olmamalıdır; kendi sınıfına sahip bir hizmettir:<br/></p>

<div class="highlight js-code-highlight">
    <pre class="highlight php"><code><span class="kd">class</span> <span class="nc">SeoService</span>

{
public function getMeta(): array { // }
public function getBlogPostMeta(array $post): array { // }
public function getSchemaOrg(string $type, array $data): string { // }
}

<p>Her sayfa türü için özel meta üretimi vardır. Schema.org JSON-LD, sayfa başına enjekte edilir. Open Graph etiketleri dinamiktir. Sitemap, RSS/Atom/JSON beslemeleri ve OpenSearch tanımı, aynı ContentService verilerinden üretilir — bu, onların asla güncellenmemesini sağlar.</p>

<h2>
  <a name="principle-7-blade-component-system" href="#principle-7-blade-component-system">
  </a>
  Prensip 7: Blade Bileşen Sistemi
</h2>

<p>Blade şablonlarında ham HTML kullanmak tutarsızlığa yol açar. Ben tam bir bileşen sistemi kullanırım:<br/></p>

<p><code><x-button/></code> bileşeni, tüm buton varyantlarını, simge konumlandırmasını ve stil mantığını kapsar. Bileşende yapılan bir değişiklik tüm sitedeki butonları günceller. Aynı şablon, sayfalama, kartlar, başlıklar ve altbilgiler için geçerlidir.</p>

<h2>
  <a name="the-deployment-layer" href="#the-deployment-layer">
  </a>
  Dağıtım Katmanı
</h2>

<p>Mimari yalnızca kod seviyesinde bitmez. Dağıtım hattım mimarinin bir parçasıdır:</p>

<p>git push → GitHub → Deployer SSH tetiklemesi<br/>→ composer install --no-dev --optimize-autoloader<br/>→ npm run build<br/>→ php artisan config:cache<br/>→ php artisan route:cache<br/>→ php artisan view:cache<br/>→ atomik sembol değişimi (ln -sfn)<br/>→ php artisan cache:clear</p>

<p>Sembolik değişim, çekirdek seviyesinde atomiktir. Sunucu, bozuk bir derleme sunmaz. Geri alma, tek bir komutla gerçekleştirilir: dep rollback.</p>

<h2>
  <a name="what-this-architecture-gives-you" href="#what-this-architecture-gives-you">
  </a>
  Bu Mimari Size Ne Sağlar?
</h2>

<p>Problemler<br/>Bu Şema Nasıl Çözer</p>

<p><strong>Test Edilebilirlik</strong><br/>Arabirimler arkasındaki hizmetler → her şeyi sahteleyebilir</p>

<p><strong>Bakım Kolaylığı</strong><br/>Tekil sorumluluk → her sınıf için bir değişim nedeni</p>

<p><strong>Yeni Başlayanlar için Kolaylık</strong><br/>Öngörülebilir yapı → yeni geliştiriciler her şeyi hızlı bulabilir</p>

<p><strong>Değiştirilebilirlik</strong><br/>Arabirim bağlama → veri kaynaklarını yeniden yazmadan değiştirin</p>

<p><strong>Tutarlılık</strong><br/>Blade bileşenleri → UI değişiklikleri küresel olarak yayılır</p>

<p><strong>Performans</strong><br/>Hizmetteki önbellek katmanı → kontrolcüler doğrudan I/O ile temas etmez</p>

<p><strong>Dağıtılabilirlik</strong><br/>Atomik dağıtımlar → sıfır kesinti, anında geri alma</p>

<h2>
  <a name="the-takeaway" href="#the-takeaway">
  </a>
  Alınacak Not
</h2>

<p>Mimari, zeki değil. Amaçlı olarak sıkıcı. Burada kullanılan her tasarım deseni — hizmet katmanı, arabirim ayırma, görünüm bestecileri, dönüştürücüler, bileşen sistemi — iyi belgelenmiştir ve yaygın olarak anlaşılmaktadır. Disiplin, bunları her projede tutarlı bir şekilde uygulamakta yatmaktadır; yalnızca kod tabanı "yeterince büyük" olduğunda değil.</p>

<p><a href="https://klytron.com" target="_blank" rel="noopener noreferrer">klytron.com</a>'un arkasındaki kod tabanı, bu gönderide tanımlanan her kalıbı kullanıyor. Bu, düzenli bakım, genişletme ve dağıtım yaptığım bir üretim sistemidir. Bu kalıplar, herhangi bir Laravel projesine doğrudan aktarılabilir — ister bir içerik sitesi, ister bir SaaS platformu, ister bir kurumsal API olsun.</p>

<p>Bir Laravel uygulaması inşa ediyorsanız ve kontrolcü metodlarınız uzamaya başlıyorsa, cevap neredeyse her zaman aynıdır: bir hizmet çıkarın, bir arayüz tanımlayın ve kontrolcünün ince olmasını sağlayın.</p>

<p>Laravel projenizin yapısal sorunları hakkında sorularınız mı var? Uygulama mimarisi danışmanlığı yapıyorum ve mevcut kod tabanlarını inceleyerek yapısal iyileştirmeleri tanımlayabiliyorum. <a href="https://klytron.com" target="_blank" rel="noopener noreferrer">İletişime geçin</a>.</p>

<hr/>

<p><em>İlk olarak <a href="https://klytron.com/blog/how-i-structure-large-laravel-projects-architecture-blueprint" target="_blank" rel="noopener noreferrer">klytron.com</a>'da yayınlanmıştır.</em></p>

Kaynak: Orijinal Makale

Bu Makaleyi Paylaş