Bir PHP eski projeye ORM nasıl eklenir?

3 Cevap php

Biz 2 yıldan fazla süredir gelişmekte olan bir PHP projesi üzerinde çalışıyoruz ve şimdi takım hazır olduğunu ve bir ORM üzerine gelişimini açmak için istekli hissediyorum. Gerçekten gelişimini hızlandırır ve SQL kodu ve veritabanı tabloları çoğu zaman açısından düşünüyorum Objects işletmek ve değil izin çünkü.

O YAML veri demirbaşlar yükü vardır, çünkü Doctrine ORM seçmek için karar verdik - biz çok bizim birim testler için gereklidir.

Ben asıl korkusu, yeni bir ORM çerçeve kullanarak sitenizin performansını yavaşlatabilir olabilir. Biz (PDO-uyumlu değil, pg_connect sözdizimi kullanır) geçerli veritabanı soyutlama katmanı arasında paylaşılan bir bağlantı yapamazsınız. PDO_SQLITE sözdizimi ile uyumsuz SQL kodu çok var çünkü veritabanı bağlantı mekanizması, PDO-uyumlu geçiş olamaz.

Bunu kullanmaya başlayacak Yani, anladığım kadarıyla, bu veritabanı bağlantıları sayısını iki katına çıkacak. Ben veritabanı sunucusu bu işlemek mümkün olacak emin değilim.

Ne bu koşulda yapmak bizi tavsiye ederim?

3 Cevap

PDO_SQLITE ne alaka biridir?

Aslında SQLite sürücüsünü kullanarak düşünmüyorsanız sonra uyumluluk PDO tarafından zorunlu değildir.

Eğer SQLite kullanmak için gidiyoruz değilseniz o zaman ben eski veritabanı katmanı PDO uyumlu kılacak ve tam Doktrini göç kadar bağlantılarını yeniden kullanın.

That said, the level of connections is not going to be your only performance concern moving to an ORM. They are inherently inefficient so I'd expect slower queries, higher bandwidth use between application servers and the database servers and higher memory use at the application level due to redundant data inevitably getting selected. Depending on your current setup, the above may or may not be issues.

Onlar hiçbir deneyimi yaşadım hangi ile özellikle sadece genel ORMs arasında özellikleri ve Doktrin değil, çünkü muhtemelen olsa bir tutam tuz ile bu son paragraf almalıdır.

İhtiyacınız kadar yapabileceğiniz belirgin şey bir veritabanı bağlantısı açık değildir. Ben şahsen bu gibi bir kod kullanabilirsiniz:

public function connect() {
  if (!defined('CONNECT')) {
    mysql_connect(...);
  }
}

public function db_query($query) {
  connect();
  $ret = mysql_query($query);
  if (!$ret) {
    die(mysql_error());
    error_log(mysql_error() . ' - ' . $query);
  }
  return $ret;
}

tekrarlayan miktarını azaltmak için ve bir ihtiyacınız olduğunda sadece bir bağlantıyı açmak için.

Sizin durumunuzda sonra başlamak için olabildiğince küçük öbek kopmak gerekir. İdeal bu dilim yeni kod ve eski ile çok az olan hemen hemen tüm veritabanı iş yapacak, yani bir vertical slice olmalıdır. Veritabanı bağlantıları az ikiye katlanması yukarı olabilir ve bu bazı becerileri oluşturmak ve de bazı deneyimi sağlar bu şekilde.

Ama dikkat, ORM herhangi bir derde deva suretiyle değildir. Sadece başka sorunlardan biri set ticareti, çoğunlukla, SQL nefret ve keman ve hata eğilimli bulmak ama sen olabilir. Ben şahsen ORM yararlı olabilir iken overhyped ve çok da farkına veya kabul etmek isteyen daha bir yanlış ekonomi daha fazla olduğunu olduğunu düşünüyorum. I Using an ORM or plain SQL? daha bu yazdı

Bunu yapmamam gerektiğini söylemiyorum. Sadece tüm sorunları çözebiliriz düşünme gitmez. Bu yeniden yazma (aslında size tarif ettik ne) hiç işlevselliğini değiştirmez çünkü yapmanın maliyeti çok orada zaten ne sabitleme ile kıyaslanacak Ayrıca, eğer ben emin değilim. Durumunuz gidecek hangi şekilde söylemek için çok bilinmeyenli.

Eh, evet ve hayır - DB bağlantıları sadece sürece olmayan bir PDO ve PDO bağlantısı hem de sahip olarak iki katına çıkacaktır.

SQLite şimdi kullandığınız görünüyor PostgreSQL daha tamamen farklı bir veritabanı beri ben, sen PDO_SQLITE referans ile ne demek emin değilim.

Çok yanlış bir şey yapıyorsun sürece bugün olduğu gibi PDO :: sorgusu aracılığıyla geçerli sorguları çalıştırmak mümkün olmalıdır :)