AQC Felsefesi
AQC Felsefesi
AQC, tek bir ilkeye dayanır:
Bir sınıf = bir niyet. Parametreler varyasyonları tanımlar.
Klasör Yapısı
Klasör Yapısı
CRUD işlemleri için basit bir organizasyon:
app/
└─ AQC/
├─ Product/
│ ├─ GetProducts.php
│ ├─ GetProduct.php
│ ├─ CreateProduct.php
│ ├─ UpdateProduct.php
│ └─ DeleteProduct.php
│
└─ User/
├─ GetUsers.php
├─ GetUser.php
├─ CreateUser.php
├─ UpdateUser.php
└─ DeleteUser.php
1. Birden Fazla Kayıt Getir (GetProducts)
1. Birden Fazla Kayıt Getir (GetProducts)
0) {
$productObj->where('category_id', $params['category_id']);
}
if (isset($params['brand_id']) && $params['brand_id'] > 0) {
$productObj->where('brand_id', $params['brand_id']);
}
// daha fazla filtre uygulama
// sütunları seç
if (isset($params['columns']) && count($params['columns']) > 0){
$productObj->select($params['columns']);
} else {
$productObj->select('*');
}
// sıralama uygulama
if (isset($params['sortBy']) && isset($params['type'])){
$sortBy = $params['sortBy'];
$type = $params['type'];
$productObj->orderBy($sortBy, $type);
}
return isset($params['paginate'])
? $productObj->paginate(Product::PAGINATE)
: $productObj->get();
}
}
2. Tek Kayıt Getir (GetProduct)
2. Tek Kayıt Getir (GetProduct)
where('id', $params['id']);
}
if (!empty($params['slug'])) {
$query->where('slug', $params['slug']);
}
if (!empty($params['sku'])) {
$query->where('sku', $params['sku']);
}
return $query->firstOrFail();
}
}
3. Bir Kayıt Oluştur (CreateProduct)
3. Bir Kayıt Oluştur (CreateProduct)
4. Kayıt Güncelleme (UpdateProduct)
4. Kayıt Güncelleme (UpdateProduct)
where('id', $params['id']);
}
if (isset($params['category_id']) && $params['category_id'] > 0) {
$productObj->where('category_id', $params['category_id']);
}
// yalnızca belirtilen sütunları güncelle
return $productObj->update($params['columns']);
}
}
5. Koşullu Kayıt Sil (DeleteProduct)
5. Koşullu Kayıt Sil (DeleteProduct)
where('id', $params['id']);
}
if (!empty($params['category_id'])) {
$query->where('category_id', $params['category_id']);
}
if (!empty($params['brand_id'])) {
$query->where('brand_id', $params['brand_id']);
}
return $query->delete();
}
}
Neden Bu İşe Yarar
Neden Bu İşe Yarar
- Parametre odaklı: Sıkı yöntemler yok. Birden fazla senaryoya esnek.
- Tek sınıf = tek niyet: Her sınıf atomiktir.
- Kontrolörler ince kalır: Tüm sorgu mantığı AQC içinde yer alır.
- Bağımlılık enjeksiyonu gerekmez: Eloquent yeterlidir, çünkü bu sorgular sabit niyetlere sahiptir.
- Yeniden kullanılabilir atomik filtreler: Ortak filtreler (örneğin, aktif, durum, rol) statik yardımcılar içerisine taşınabilir ve birden fazla sorgu sınıfına uygulanabilir.
Son Düşünceler
Son Düşünceler
AQC karmaşıklıkla ilgili değildir. Netlik, atomiklik ve esneklik ile ilgilidir.
- Birden fazla kayıt mı almak istiyorsunuz?
GetProducts()ile parametreleri kullanın. - Tek bir kayıt mı almak istiyorsunuz?
GetProduct()kullanın. - Oluşturma, güncelleme, silme? Her biri için atomik bir sınıf koşullu davranışla bulunmaktadır.
Doğru şekilde uygulandığında, AQC, kontrolörleri ince tutar ve sorguları esnek kılar. Uygulamanız büyüdükçe, yöntem patlaması ya da gereksiz soyutlama katmanları oluşturulmadan ölçeklenir.
Kaynak: Orijinal Makale


