Atomic Query Construction (AQC) deseniyle ilgili sıkça sorulan bir soru var:
Parametreler neden DTO’lar yerine diziler olarak geçiyor?
DTO’lar başlangıçta daha “temiz” bir çözüm olarak görünebilir. Tür güvenliği, yapı ve açık sözleşmeler sağlarlar. Ancak birçok mimaride DTO kullanımı mantıklıdır.
Fakat AQC, diziler etrafında kasıtlı olarak tasarlanmıştır ve bunların DTO’larla değiştirilmesi, desenin temel fikirlerinden birini zayıflatır.
AQC Parametre Tabanlıdır
AQC Parametre Tabanlıdır
AQC’nin temel fikri basittir:
Parametreler sorguyu şekillendirir.
Her bir parametre, belirli bir atomik mantık parçasını etkinleştirir.
Örneğin:
$params = [
'category_id' => 5,
'min_price' => 100,
'max_price' => 500,
'with' => ['brand']
];Sorgu sınıfı içinde:
$query = Product::query();
if (!empty($params['category_id'])) {
$query->where('category_id', $params['category_id']);
}
if (!empty($params['min_price'])) {
$query->where('price', '>=', $params['min_price']);
}
if (!empty($params['max_price'])) {
$query->where('price', 'with($params['with']);
}Her parametre ayrı ayrı nihai sorguya katkıda bulunur.
Bu, sorgu bileşimini dinamik hale getirir.
Ve burada dizilerin önemi devreye giriyor.
Parametrelerin Kartezyen Esnekliği
Parametrelerin Kartezyen Esnekliği
AQC, parametrelerin serbestçe bir araya gelme fikrini benimser.
Beş isteğe bağlı parametreye sahip olduğunuzda:
category_id
brand_id
price_min
price_max
with
Yalnızca beş senaryo yoktur.
Onlarca olası kombinasyon vardır.
Örnekler:
category_id
category_id + brand_id
category_id + price_min
brand_id + price_max
price_min + price_max
category_id + brand_id + with
brand_id + price_min + price_max
Kombinasyon sayısı hızla artar.
Diziler, parametrelerin sadece mevcut veya mevcut olmaması gerektiği için bu durumu doğal olarak sağlar.
Her parametre, bir sorgu mantığını etkinleştiren bir anahtar gibi çalışır.
DTO’lar, her alanın önceden tanımlanmasını bekleyen katı bir yapı teşvik ettiği için bu ortamda iyi çalışmaz.
AQC, katı yapılara göre tasarlanmamıştır.
Bu, kombinasyonel esneklik için tasarlanmıştır.
DTO’lar Gereksiz Bir Katılık Getirir
DTO’lar Gereksiz Bir Katılık Getirir
Bir DTO genellikle şu şekilde görünür:
class ProductQueryDTO
{
public ?int $categoryId;
public ?int $brandId;
public ?int $priceMin;
public ?int $priceMax;
}Bu anında birkaç probleme yol açar.
1. DTO’lar Yapıyı Çok Erken Tanımlar
1. DTO’lar Yapıyı Çok Erken Tanımlar
DTO’lar tüm olası parametreleri en başından belirlemeye zorlar.
Ama sorgular gelişir.
Yarın şunları ekleyebilirsiniz:
min_stock
max_stock
rating
visibility
published_at
Artık DTO’nuz büyüyor. Daha sonra başka bir geliştirici, biraz farklı bir sorgu için başka bir DTO oluşturuyor.
Kısa sürede DTO’lar çoğalmaya başlar.
2. DTO’lar Ekstra Bir Katman Ekler
2. DTO’lar Ekstra Bir Katman Ekler
AQC sınıfları zaten tek bir amaç için hizmet ediyor: sorguları oluşturmak ve yürütmek.
DTO’lar tanımlandığında bir çeviri katmanı ekliyorsunuz:
Request → DTO → AQC → Query
Dizilerle akış basit kalır:
Request → AQC → Query
AQC, gereksiz katmanlardan kaçınmayı amaçlar.
3. DTO’lar Dinamik Bileşimi Azaltır
3. DTO’lar Dinamik Bileşimi Azaltır
DTO’lar sabit bir sözleşme ifade eder.
Ama AQC, koşullu sorgu parçaları üzerine kurulmuştur.
Her parametre bir mantık parçasını etkinleştirir.
Diziler, yapısal kısıtlamalar olmadığında parametrelerin kaybolup kaybolmadığını gösterebildikleri için bunu doğal olarak destekler.
Diziler AQC Felsefesine Uyar
Diziler AQC Felsefesine Uyar
AQC birkaç net fikre dayalıdır:
- Bir sınıf = bir amaç
- Parametreler sorgu davranışını kontrol eder
- Sorgular koşullu olarak birleştirilir
- Kontrolörler ince kalır
Diziler bu felsefe ile mükemmel bir uyum içindedir.
Her parametre, bir atomik sorgu segmentini tetikleyen bir anahtar gibidir.
Bu da AQC sınıfındaki sorgu oluşturucunun son derece esnek olmasını sağlar ve başka yerlerde karmaşıklık getirmez.
Son Düşünce
Son Düşünce
DTO’lar birçok mimari modelde faydalıdır.
Ama AQC, kasıtlı olarak parametre tabanlıdır ve diziler sorgu bileşiminin dinamik doğasını korur.
Her parametre, atomik bir sorgu parçasını etkinleştirir ve diziler bu parçaların serbestçe bir araya gelmesini sağlar.
DTO’ları bu desene zorlamak, deseni iyileştirmez.
Bu, sistemi ağırlaştırırken, AQC’nin sağladığı esnekliği ortadan kaldırır.
Kaynak: Orijinal Makale



