Aktif Records amacı nedir?

5 Cevap php

Ben CodeIgniter ile müdahalesi yaşıyorum ve ilk defa Aktif Kayıtları rastlamak var. İlk başta ben gerçekten SQL yazmak nasıl bilmiyorum insanlar için bir şey olarak reddetti. Ben analiz kusurlu olduğunu artık biliyoruz ve Aktif Kayıtları özellikle Rails, oldukça belirgindir.

Ama Aktif Kayıtları ne amaçla aldınız? Uzakta farklı RDBMS bireyselliklerin soyut etmektir. Eğer öyleyse ben bu SQL yapmak için ne demek olduğunu bu değil düşündüm. Ben bu kullanarak olmalıdır Ayrıca, en iyi uygulama nedir?

Şimdiden teşekkürler

5 Cevap

"Active Record Pattern" en programlama çerçeveler temel bir parçası haline gelmektedir. Bu basit CRUD (Sil, Güncelle, Read) daha hızlı ulaşmak için görevleri yapar. Ziyade, takın Update ve birçok ortak ve basit veri nesneleri sil birçok sqls yazmak zorunda değil Örneğin, sadece veri nesnesine değerler atamak ve bir komut örneğin çalıştırmanızı sağlar $ Object->) (kaydetmek, SQL derlenmiş ve sizin için yürütülür.

Çoğu çerçeveler de büyük ölçüde nesneye ilişkin veri erişimini kolaylaştırabilirsiniz kendi Active Record modelleri içinde veri ilişkileri uygulamak. Belirttiğiniz Örneğin, CodeIgniter'daki, bir Kategori "vardır çok" olduğu ürünler daha sonra veritabanından Kategori nesneyi yükledikten sonra, bir kod basit bir çizgi ile bu çocuk ürünleri bulunuyor listeleyebilirsiniz.

foreach ($category->products as $product) {
  echo $product->name;
}

Bu önemli hakkı gibi olası değildir, ancak Active Record diğer faydası, (bu kadar uzun kullandığınız çerçeve seçtiğiniz veritabanı için bir sürücü olduğu gibi) farklı veritabanı platformları için kod kolayca taşınabilir yapar, dedikleri gibi, ve uygulama popüler hale gelirse artık, daha sonraki bir tarihte büyük değere sahiptir Gözat!

Umarım bu yardımcı olacaktır. Vikipedi de Active Record açıklanır (http://en.wikipedia.org/wiki/Active%5Frecord%5Fpattern) ve CodeIgniter docs lutfen olacaktır. Şahsen, CodeIgniter sadece çatal bir PHP5 (http://www.kohanaphp.com) hangi KohanaPHP kullanmak ve bunu ORM modelleri çok yararlı olduğunu bulmak!

Active Record veri erişimi için bir tasarım desen ...

ActiveRecord ve Deposu Desen: Şu anda ben veri erişimi ile ilgili rastlamak gibi iki ana tasarım desenleri var

Active Record

Sizin nesneler kadar DB (veya başka bir kalıcılık mekanizması) kendi devlet ısrarcı için yöntemler içerir:

Bir Müşteri nesnesi olabilir.

Müşteri nesne) Customer.Save (gibi yöntemler bir grup olacak;, Customer.Get (int id); ve diğerleri.

Bu yöntemler gerçekten gerçek dünyada bir müşteri ile ilgisi yok. Bunlar uygulama altyapısı hakkında gerçekten.

Repository Pattern

Depo desen olarak, müşteri nesne POCO, ya da aptal bir nesne olurdu. Sadece gerçekten (isim, e-posta adresi, Liste siparişleri, gibi şeyler vb) bir müşteri temsil gerektiğini yöntem ve özelliklere sahip

Eğer müşteri devam etmek istediğinizde - Eğer sadece depo geçmek

Repository.Save (MyCustomer).

Etkin kayıt deseni hızlı ve çalışmak kolaydır. Ne yazık ki, bu gerçekten bir Müşteri ile ilgisi yok bu yöntemler ile etki alanı modeli kaplamak gelmez. Bu biraz zor zamanla etki modeli korumak için yapar.

Durumun bir sürü için bir Active kayıt deseni kullanmak için çok uygundur. Örneğin - Herhalde çok değişecek değil oldukça basit bir uygulama yazıyorum, ben muhtemelen subsonik ateş ve benim bir Active Record DAL oluşturmak istiyorum. Ben 20 dakika içinde benim iş kod kodlama olurdu ve tüm DB şeyler zaten halledilir.

Öte yandan, ben değiştirmek için yüksek hassasiyete sahip, özellikle karmaşık bir etki modelleme ediyorum, eğer, ben oldukça temiz benim etki modelleri tutmak ve NHibernate veya benzer bir depo desen uygulamak istiyorum ...

Ben ADO.Net kullanarak kendi veri erişimi haddelenmiş, ve ben gerçekten artık çok büyük veri erişim araçları vardır bunu önermiyoruz çünkü uzun bir zaman oldu.

Ben bu desen benim kendi görünüm verebilir ancak Active Record (ve diğerleri) en iyi kapsama Patterns of Enterprise Application Architecture Martin Fowler gereğidir.

Bölüm 10 Gönderen:

Active Record

An object that wraps a row in a database table or view, encapsulates the database access, and adds domain logic on that data.

An object carries both data and behavior. Much of this data is persistent and needs to be stored in a database. Active Record uses the most obvious approach, putting data access logic in the domain object. This way all people know how to read and write their data to and from the database.

...

Ne zaman kullanılır?

Active Record is a good choice for domain logic that isn't too complex, such as creates, reads, updates, and deletes. Derivations and validations based on a single record work well in this structure.

...

Active Record has the primary advantage of simplicity. It's easy to build Active Records, and they are easy to understand. Their primary problem is that they work well only if the Active Record objects correspond directly to the database tables: an isomorphic schema.

If your business logic is complex, you'll soon want to use your object's direct relationships, collections, inheritance, and so forth. These don't map easily onto Active Record, and adding them piecemeal gets very messy. That's what will lead you to use Data Mapper instead

Eğer bir şey, yazma sorguları kolaylaştırır. Ben normal bir MySQL sözdizimi sözdizimi hataları (hata yok ama benim kendi) eğilimli bulmak ve CI etkin kayıt sözdizimi ile bu nadiren bana olur.

Active Record CI IMHO havalı özelliklerinden biridir

Active Record bir ORM - Eğer Nesne-İlişki Haritalama tekniği baktın mı? Ben ORM anlamak, yararlarını görmeye başlayacaktır düşünüyorum.