Soyut CRUD işlemleri için Doktrini kullanma

2 Cevap php

Bu uzunca bir süre beni rahatsız etti, ama şimdi ben cevap bulmak zorunluluktur.

Biz CodeIgniter'ı artı Doktrini ile oldukça büyük bir proje üzerinde çalışıyoruz.

Bizim uygulama bir ön uç ve ayrıca verileri silin / / değişimi kontrol etmek için bir şirket için yönetici alana sahiptir.

Biz ön uç tasarlanmış zaman, biz sadece sağ denetleyicisi Doktrini kod en çok tüketilen:

//In semi-pseudocode
function register()
{
  $data = get_post_data();

  if (count($data) && isValid($data))
  {
    $U = new User();
    $U->fromArray($data);
    $U->save();

    $C = new Customer();
    $C->fromArray($data);
    $C->user_id = $U->id;
    $C->save();

    redirect_to_next_step();
  }
}

Yapmamız gitti Açıkçası yönetici görünümleri kodu çoğaltma başladı ve biz vardı düşünüyor bir artık kod kabartmak ile kokuyor bu yüzden modu "halletmek".

Ben modeli yöntemleri kullanarak modele işlevselliği (iş mantığı) bir sürü taşınmış, ancak temel CRUD orada uymuyor.

Ben statik yöntemler içine CRUD teşebbüs etmek gidiyordu, yani Müşteri :: [prikey dizide varsa bağlı olarak ekleme ve güncelleştirme hem de gerçekleştireceklerini] ($ dizi) kaydetmek, Müşteri :: ($ id) silmek, Müşteri: : getObj ($ id = false) [false ise, tüm verileri olsun]. Bu 32 modeli nesneleri (ve büyüyen) için olsa ağrılı olmaya devam ediyor.

Ayrıca, zaman zaman modeller kapsüllemeyi bozmadan statik yöntemle yapılamaz ki, (kullanıcı verileri ve müşteri verileri arasındaki yukarıda etkileşim gibi) etkileşim gerekir.

Ben (web hizmetlerini teşhir), bu başka bir katman ekleyerek, bu yüzden bir yerde (tabii ki) bu CRUD saklanması gerekiyor, fakat statik yöntemleri gitmek için yolu bazı noktada 3 "kontrolörleri" orada olacak bilerek, ya da orada olduğu öngörülüyor Başka bir yol?

Sizin girişi çok takdir edilmektedir.

2 Cevap

Neden bir cephe kullanmak değil mi?

class RegistrationManager {
 public function register( $postData, $callBack ){
      $data = get_post_data();
      if (count($data) && isValid($data)){
        $U = new User();
        $U->fromArray($data);
        $U->save();
        $C = new Customer();
        $C->fromArray($data);
        $C->user_id = $U->id;
        $C->save();
        $callBack(); //I like this but you need PHP5.3
      }
     }
 }

App denetleyicileri:

$r = new RegistrationManager;
$r->register( get_post_data(), function(){ redirect_to_next_step(); } );

Cepheler (bence), sen kabloları veya karmaşıklığı gizlemek ve kod tekrarını azaltmak için bunları kullanabilir çok Modelleri bulunmaktadır.

Ben tablolar class'es bu mantık koymak gerektiğini düşünüyorum

class UserTable extends Doctrine_Table
{
  public function register()
  {
    // There you do data model (not concrete object) related stuff
  }
}

http://www.doctrine-project.org/projects/orm/1.2/docs/cookbook/code-igniter-and-doctrine/en