Bu MySQL veritabanı işlemek için ya da ben sadece SQL kullanmalısınız CodeIgniters Active Record kütüphane kullanmak iyi bir fikir mi?

2 Cevap php

Ben CodeIgniter ile vâkıf başlayan ve Active Record desen için verdiği destek geldi ediyorum.

Ben bunu aslında size, almak güncelleme ve belirli bir veritabanı motoruna uygulama meşgul etmeden bir veritabanına veri ekleyebilirsiniz için SQL kodunu oluşturduğu gerçeğini seviyorum.

Basit sorgular çok basit yapar ama benim endişe (örneğin motor belirli fonksiyonlar için ihtiyaç halinde) karmaşık sorgular daha karmaşık değilse imkansız kılıyor.

My Questions

Özellikle CodeIgniters uygulanmasına ilişkin bu desen sizin düşünceniz nedir?

Başka bir katmanda veritabanı sarma ile herhangi bir hız sorunları var mı?

Çok karmaşık sorguları oluşturmak için çalışırken (mantık) dağınık olur mu?

Avantajları çıkış yolu dezavantajları musunuz?

2 Cevap

Tamam, sorguları tüm% 99 Öncelikle select / ekleme / güncelleme / silme basit olacaktır. Bu aktif kayıt için harika. Kolayca değiştirilebilir basit bir sözdizimi sağlar. Daha karmaşık sorgular için sadece sorgu yöntemi kullanmalısınız. Ne onun için Thats.

İkincisi, O & kaçan sağlar Bu sorgular için güvenlik. O Yüz, uygulama muhtemelen sorgular gerçekleştiği yerlere yüzlerce değilse binlerce olacaktır. Sizin kadar vida ve düzgün bazıları kaçmak için unutmak bağlanmıştır. Etkin kayıt unutmaz.

Üçüncüsü, benim deneyim performansı önemli ölçüde etkilenmez. Tabii ki öyle ama onun etrafında muhtemelen 0,00001 sorgu başına. Ben bu sizin için yapar ilave güvenlik ve aklı kontrolleri için mükemmel kabul olduğunu düşünüyorum.

Son olarak, ben avantajları dezavantajları çok daha büyük olduğuna inanıyorum onun açık olduğunu düşünüyorum. Hatta en genç geliştirici berbat anlamak edemez ve güvenli sorgular olması harika bir şey.

Sizin düşünceniz nedir (sic), özellikle CodeIgniters uygulanmasına ilişkin bu desen?

CI uygulanması hakkında çok diyemeyiz. Genellikle basit uygulamalar için bir şey ama AR kaçının. Tablo benim iş nesneleri 01:01 uymazsa, ben zor uygulama modelleme yapacak gibi, AR kullanmayın. Ben de iş nesnelere kalıcılık katmanı bağlanması fikrini sevmiyorum. Bu endişeleri ayrılığı bir ihlalidir. Neden Ürün kendisini kurtarmak için nasıl bilmeli? Remnantlı okuma: http://kore-nordmann.de/blog/why_active_record_sucks.html

EDIT after the comment of @kemp, I looked at the CI User Guide to see how they implemented AR:

Eğer gördüğünüz gibi PoEAA bir AR an object that wraps a row in a database table or view, encapsulates the database access, and adds domain logic on that data. Bu CI olsa ne değildir olmasıdır. Sadece sorguları oluşturmak için bir API sağlar. Ben orada AR ve iş nesneleri oluşturmak için kullanılabilecek genişleten bir model sınıf olduğunu, ancak daha sonra bir Row Data Gateway gibi olacağını anladım. PHPActiveRecord alternatif bir uygulama için check out.

Başka bir katmanda veritabanı sarma ile herhangi bir hız sorunları var mı?

Soyut ya da başka bir şey içine bir şey sarmak zaman, bu ham bunu yaparken üzerinde bir performans etkisi ile geliyor emin olabilirsiniz. Soru, bu uygulama için kabul edilebilir. Öğrenmek için tek yol kıyaslama gereğidir. Ek Okuma: http://stackoverflow.com/search?q=orm+slow

EDIT CI basit sorgu bina API durumda, ben performans etkisi ihmal olmayı kabul ediyorum. Sorguları Montaj mantıklı sadece db adaptörü ham SQL dizesi geçen kullanarak daha biraz daha fazla zaman alacak, ama bu sadece mikrosaniye olmalıdır. Ve bildiğim kadarıyla Kullanım Kılavuzu yapabilirsiniz ayrıca önbellek sorgu dizeleri onu gördük gibi. Ama ne zaman şüphe, kriter.

Çok karmaşık sorguları oluşturmak için çalışırken (mantık) dağınık olur mu?

Sorgularda bağlıdır. Ben oldukça dağınık SQL sorguları gördüm. OO arayüz üzerinden ifade edildiğinde bu güzel alamadım. API bağlı olarak, bunu aracılığıyla ifade etmek mümkün olmayacaktır sorguları bulabilirsiniz. Ama sonra tekrar, bu sorgular bağlıdır.

Avantajları çıkış yolu dezavantajları musunuz?

Sadece siz karar verebilirsiniz. Kolay bir programcı olarak hayatınızı yaparsa, emin neden olmasın. Sizin programlama ihtiyaçlarına uygun olursa, evet. Ruby on üzerinde ağır (AR) kavramı oluşturmak, bu yüzden tüm bu kötü olamaz (biz :) bu konuda çok iddia olabilir ancak)