Ajax isteklerine yanıt veren bir PHP hizmet yapısı nasıl

0 Cevap php

Bir Ajax uygulaması gelen isteklere yanıt veren sunucu tarafı komut tasarlamak için mücadele ediyorum.

Mevcut durumda, uygulaması (örn., siparişler, Öğeleri, Finans,) ayrı sayfalara bölünmüş. Bu sayfaları arasında geçiş sadece gerçek web sayfası yeniden yükleme yapar. Her sayfa tüm Ajax isteklerinin yönlendirildiği için operator.php bir kök içine gerekli o kendi "operatörü", vardır.

Her operatör bulunan bu model geçerli:

foreach ($actions as $action) {
    switch ($action) {
    case 'get-items':
        [...]
        break;
    case 'get-item':
        [...]
        break;
    case 'update-item':
        [...]
        break;
    [...]
    }
}

$actions isteği tarafından temin edilir, örneğin operator.php?page=items&action=get-item&id=123.

Uygulama daha karmaşık hale geldikçe, bu eylem istenen itibaren bağlamda her eylemin mantığını ayırmak için yardımcı oldu.

Ben PHP dahili bir eylemin mantığı kullanmak istedim ben sık sık bu deseni kullanmak istiyorum bulundu:

$items = json_decode(file_get_contents('http://[...]/operator.php?action=get-items'));

(Söylemeye gerek yok, bu tasarım ek yükü bir sürü oluşturur.)

Peki yerine şimdi her sayfası tarafından genişletilmiş bir Operator sınıf var. Ben, örneğin, bir ItemsOperator oluşturmak ve doğrudan herhangi bir kodlama veya kod çözme veya gereksiz HTTP istekleri olmadan, istediğim eylemi çağırabilirsiniz:

$items = $itemsOperator->getItems();

Öyle gibi, Operatör sınıfını kullanmak için Ajax isteklerine yanıt komut dosyası güncellendi:

foreach ($actions as $action) {
    switch ($action) {
    case 'get-items':
        $json['items'] = $operator->getItems();
        break;
    [...]
    }
}

if (count($json)) {
    echo json_encode($json);
}

Bu yaklaşım oldukça iyi çalışır, ancak herhangi bir resmi web geliştirme eğitimi hiç ettik, ve ben (çıldırtırcasına Google'da bulamıyorum) kurulmuş, daha iyi soyutlanmış desenler vardır sanıyorum. Benim ev-demlemek yaklaşımı ile birçok eksiklikleri bu soruyu ilham:

  1. "Eylemleri" içeren "Operatör" sınıf kavramı çok muğlak ve ihsanı olduğunu. Nasıl mantığı ayırmak gerekir?
  2. Ben, örneğin, mali sayfada Eşyaları DB aramak gerektiğinde özellikle dağınık alır yaklaşımdır nerede. Ben de FinancesOperator yanında ItemsOperator dahil musunuz? (Ben şu mantığı çoğaltmak.)
  3. Operatör nesneler (ben tamamen operatörlerin kavramını dökümü gerektiğini varsayarak) ile Ajax isteği komut arayüzü için daha iyi bir yolu var mı? Örneğin, ben şu anda operatör nesnenin ilgili metot URL "eylemi" değişken haritaları her sayfa için bir komut dosyası yazmak zorunda.

Bu soru çok açık-uçlu ise çok üzgünüm. Ben fikirler kapalı sıçrama çevremdeki geliştiriciler yok (ve dediğim gibi, ben herhangi bir gerçek eğitim vardı) - bu yüzden SO topluluk tavsiye duymak paha biçilmez. Bu gibi bir betik tasarlarken, olasılıklar numarası / yaklaşımlar / stratejileri tamamen zor olabilir. Eğer belirli bir yaklaşımı birkaç gün zaman yatırım yaptık Ve bir kez, geri çevirmek çok zor olabilir.

Teşekkürler göz için çok (ve bu kadar okuma).

0 Cevap