Модель Zend Framework 2 / адаптер многоразового использования
У меня есть модель, которая используется двумя модулями. Я не хочу дублировать код для этой модели в каждом модуле.
Например у меня есть 2 модуля. Первый берет сообщения блога из модели и распечатывает их для обычных пользователей, а второй печатает их для администраторов, но с несколькими дополнительными параметрами (которые установлены в представлении). У меня была бы одна и та же модель в двух местах. И.. это плохо.
Просто кусок кода:
<?php
namespace Blog\Model;
use Zend\Db\Adapter\Adapter;
use Zend\Db\ResultSet\ResultSet;
use Zend\Db\TableGateway\AbstractTableGateway;
class BlogTable extends AbstractTableGateway
{
protected $table = 'blog_posts';
public function __construct(Adapter $adapter)
{
$this->adapter = $adapter;
$this->initialize();
}
/**
* Gets the blog post list
*
* @return array
**/
public function fetchAll()
{
//..
}
}
Итак, как мне разработать это приложение?
2 ответа
Самый большой вопрос может заключаться в том, почему вы отделяете административную сторону от "Blog-Scope". Административный модуль должен быть только внешним интерфейсом для сбора всех опций (если это имеет смысл)
Однако, чтобы вернуться к вашему вопросу: вы можете просто включить эти классы из модели A в модель B, например: use Blog\Model\BlogTable
В конечном счете, хотя я и считаю управление модулем ответственным за сам модуль блога, на что намекает первый абзац.
Редактировать: одна вещь, которую я забыл упомянуть. В идеале, если вы решите использовать зависимый подход, ваш модуль должен сделать BlogTable доступным через службу. Таким образом, ваш ModuleAdmin должен сделать что-то вроде $serviceLocator->get('my-blog-table')
что гораздо более чистый подход.
Вы можете достичь этого, имея базовый / общий модуль, который предоставляет различные модели, помощников и т. Д.
Но лично я хотел бы искать модули архитектуры вокруг функциональности, а не уровней доступа пользователя.