Zend_Db ve birden fazla tablo kullanma

1 Cevap php

Ben internet üzerinde dosyaların yerleri saklar normalleştirilmiş veritabanı var. Bir dosya farklı sitelere yayılmış birden fazla yerde olabilir. Ben iki bölümden (Site.UrlStart, FileLocation.UrlEnd) olarak adresler depolamak. UrlEnd (site için) o dosya için benzersiz bir parçasıdır.

Basitleştirilmiş Db yapısı:

(Bu ise) ben Zend_Db_Table_Abstract devralmasını tablolar için sınıfları ile, benim ORM Zend_Db kullanıyorum.

Sorun konum verileri (örneğin url) alma birden fazla tablo kullanımını gerektirir ve bildiğim kadarıyla dışarı yapabilir gibi ve ben her yerinden hem masa sınıfları (dolayısıyla benim tablo yapısını teşhir) veya saçmanız sql kullanmak gerekir ya o da benim uygulama, ikisi de çekici gelebilir.

Görebildiğim tek çözüm Zend_Db_Table_Abstract (Belki ondan devraldığı?) Gibi davranır ve verileri iki tablo aslında olduğu gerçeğini gizleyen bir cephe oluşturmaktır.

Aşağıda benim sorular şunlardır:

  • Ben (başka alternatifler var mı) bir cephe sınıf oluştururken doğru yönde gidiyor muyum?
  • Cephe sınıf alması gerektiğini Zend_Db_Table_Abstract?

1 Cevap

Zend Db Tablo gerçekten çok basit bir kullanımı durumlarda ötesinde bir ORM değildir. Bu sistemde her tabloya yakından ilişkili olması gerekiyordu. Yani, her tablo için bir Zend_Db_Table sınıf olurdu.

Büyük resmi yönetmek için, sınıfın başka tip gerekir.

So, yes, you are on the right lines with regards to using a kind-of façade.

However, I would not make it inherit from Zend_Db_Table_Abstract because it has a very different set of responsibilities.

Tür-Bir cephesi (Martin Fowler, Enterprise Architecture Of Patterns) gibi - Veri Mapper desen içine bakarak değer olabilir. Tek bir 'Alan İdarenin Türü' başına Eşleştiricisi'ni (mutlaka masa başına biri olarak aynı değildir) ve türleri bir bütün aile için belki başka, ekstra, eşleştiricisini olurdu.

A simple example of the Data Mapper patterns is on Zend Framework's intro pages: http://framework.zend.com/manual/en/learning.quickstart.create-model.html

Ve bunu uzatmak değil - Application_Model_GuestbookMapper uses Application_Model_DbTable_Guestbook nasıl unutmayın.

Ancak bu oldukça basit bir örnek ve bazen cevaplar daha çok fazla soru ile bırakabilirsiniz.

Modeline bir db harita hakkında öğrenme için iyi bir kaynaktır Scott Ambler kullanıcısının

Online makale: http://www.agiledata.org/essays/mappingObjects.html

That covers the process of dealing with relationships between data-to-data and object-to-object and data-to-object : http://www.agiledata.org/essays/mappingObjects.html#MappingRelationships

Ayrıca Veri Mapper Pattern değiniyor ve tabloları db sınıf hiyerarşileri haritası nasıl güzel bir açıklama görmek birkaç yerlerden biridir.

Ayrıca Eric Evans, modeli ve veri katmanı arasında oturup cepheleri vardır 'Depoları', kullanımını tarif etti. Veri Mappers ile tam teşekküllü bir ORM yapmak zor görünüyor, bu hızlı bir başlangıç ​​noktası olabilir. Genellikle önemli Domain İdarece (yani Agrega Kök varlıkları, 'üzüm salkımları sapları') başına bir depoyu olurdu.

See more about repositories: http://books.google.co.uk/books?id=7dlaMs0SECsC&lpg=PP1&dq=Domain-Driven%20Design&pg=PA147#v=onepage&q&f=false

Temelde Deposu vardır, diğerleri arasında bir FindById () sonra kendi cephesinin arkasında üç Zend Db Tablo nesnelerin kullanımını saklanması olabilir yöntemlerini yazın. Sizin modeli hemen 'repo' kullanmaya başlayabilirsiniz. Eğer daha fazla fantezi ORM şeyler eklemek istiyorsanız eğer, bir gün sadece repo Cephe gerisinde takas ve modeli bile bu konuda bilmek zorunda değildir.

Bu üç tablo işletmesi bağımsız bir hayat olduğunu temsil ediyorsa, o zaman onların yaşam döngülerinin her yönetmek sınıfların üç set olması iyi olabilir. Bu durumda, o zaman onların etkileşimlerini yönetmek 'a Service' (Eric Evans'ın Patterns özellikle başka biri) kullanmak istiyorsunuz. Bir hizmet herhangi birine, özel İdareye ile uygun görünmemektedir işlemleri koymak için bir yerdir.

bkz: http://books.google.co.uk/books?id=7dlaMs0SECsC&lpg=PP1&dq=Domain-Driven%20Design&pg=PA106#v=onepage&q=service&f=false

Ana nokta psikolojik Zend Db Tablo hakimiyeti kendinizi ayırmak için - bu sadece küçük bir oyuncu, bir db tablo gösterimi ve çok fazla değildir.