Zend Framework veri mapper yaklaşımı benimsemek

1 Cevap php

Adlı bir Zend Framework uygulaması için aşağıdaki tablolar kurulumu varsayalım.

user (id)
groups (id)
groups_users (id, user_id, group_id, join_date)

Ben temelde bana verir modelleri Veri Mapper yaklaşım aldı:

  • Model_User, Model_UsersMapper, Model_DbTable_Users
  • Model_Group, Model_GroupsMapper, Model_DbTable_Groups
  • Model_GroupUser, Model_GroupsUsersMapper, Model_DbTable_GroupsUsers (aentities olarak görülebilir ilişkileri tutmak için, "join_date" özelliği fark)

I Model_DbTable_GroupsUsers olarak _referenceMap tanımlayan ediyorum:

protected $_referenceMap = array (
    'User' => array (
        'columns'       => array('user_id'),
        'refTableClass' => 'Model_DbTable_Users',
        'refColumns'    => array('id')
    ),
    'App' => array (
        'columns'       => array('group_id'),
        'refTableClass' => 'Model_DbTable_Groups',
        'refColumns'    => array('id')
    )
);

Aklımda bu tasarım sorunlar yaşıyorum:

1) Model_Group sadece gruplar tablodaki alanları aynalar. Nasıl bir grup toplama bir kullanıcı tarih de bir üyesidir ve dönebilirsiniz kullanıcının katıldığı her grup için grup? Ben sadece etki alanı nesnesi özelliğini ekledi, sonra ben olmaz, grup mapper bu konuda bildirmek olurdu?

2) Diyelim ki bir kullanıcının ait gruplarını almak gerekiyor diyelim. Nerede bu mantığı koymak gerekir? Model_UsersMapper veya Model_GroupsUsersMapper?

Ben de başvuru haritada (bağımlı tablolar) mekanizması faydalanmak ve muhtemelen findManyToManyRowset veya findDependentRowset, gibi bir şey kullanmak istiyorsanız:

$result = $this->getDbTable()->find($userId);
$row = $result->current();

$groups = $row->findManyToManyRowset(
    'Model_DbTable_Groups',
    'Model_DbTable_GroupsUsers'
);

Ben sadece tek bir sorguda yazılmış olabilirdi bu iki sorgu üretecektir. Ben Model_GroupsUsersMapper sınıfta bu yerleştirecektir.

Bir geliştirme ikinci soru için yalvarır veri mapper uygun yöntemini çağırarak gerektiğinde tembel grupları yükler Model_User etki alanı nesnesi bir GetGroups yöntem eklemek olacaktır. Ben etki alanı nesnesi veri eşleştiricisine hakkında bilmek izin gerekir?

1 Cevap

Bir ilişkisel veritabanı bir nesne modeline haritasına zor olabilir çünkü bu oldukça kafa karıştırıcı bir konu olabilir.

Ben ilk nesne modeli gereksinimleri odaklanmak için eğimli olurdu. Nesne modeli (neredeyse) her zaman daha sonra bu ilişki kullanıcı sınıfına dahil edilmelidir gruplardan haberdar olmak için kullanıcı nesnesi için mantıklı Örneğin. Öte yandan sık sık onlar bir parçası olan hangi gruplar bilmek gerek kalmadan kullanıcılara kullanımı gerekiyorsa, belki de iki kullanıcı sınıflarını, bir temel sınıf ve bir grup farkında genişletilmiş versiyonu (base_user ve group_user) olabilir.

Ben bu desen kullanarak bütün noktasının tür olarak etki alanı nesnesi veri katmanı haberiniz önlemek için denemek istiyorum. Veri katmanı hemen hemen sadece etki alanı nesneleri başlatır aptal bir fabrika olmalıdır.

Sadece benim o almak :)