Yii ActiveRecord против шаблонов репозитория

Эти методы имеют как преимущества, так и недостатки.

Я разрабатываю приложение среднего размера, используя Yii.

Yii принял шаблон AR и поддерживает его по умолчанию. Преимущества использования шаблона репозитория предельно ясны, но вопрос в том, должен ли я действительно тратить время на реализацию шаблона репозитория в сочетании с Yii?

Также я хотел бы узнать ваше мнение об этих двух шаблонах. Я также хотел бы знать, почему AR так популярен и так часто используется? На мой взгляд, шаблон репозитория является более гибким, более тестируемым, имеет более чистый код и лучше интегрируется в корпоративное приложение.

Должен ли я продолжать использовать шаблон AR с Yii?

Я также думаю о переходе от Yii к Laravel. В этот момент я не потеряю большую часть своей работы, занимаясь этим.

3

Решение

Что касается меня, ActiveRecord довольно хорош в небольших проектах, но для средних и больших приложений его сложно поддерживать.

  1. Использование Yii AR может ускорить кодирование. Все модели AR и контроллеры могут быть созданы одним щелчком мыши GII.
  2. AR чрезвычайно популярен. Почти все разработчики знакомы с этим шаблоном. Новые члены команды быстрее погружаются в проект.

В случае Yii слишком много логики сконцентрировано в модельных классах AR:

  • Проверка
  • Найти методы
  • Бизнес логика

Это делает код:

  1. Менее читаемый. Часто уроки AR состоят из нескольких десятков не связанных между собой методов. Логика может быть разложена с помощью поведения или же черты. Но на самом деле это все еще очень трудно поддерживать.
  2. Трудно проверить.

Когда приложение становится достаточно большим, необходим дополнительный слой между контроллером и моделью AR. Репозиторий — отличный выбор. Что касается меня, я начал использовать репозиторий в Laravel, но теперь я использую его и в Yii 1/2.

На самом деле проблема не в реализации репозитория в Yii. AR Yii очень похож на Eloquent в Laravel. Гораздо сложнее заставить всех членов команды не работать с AR напрямую, а вместо этого использовать репозитории.

Если у вас есть опыт в Laravel, я рекомендую его использовать.

2

Другие решения

Это зависит от типа вашего приложения:

  • Комплексное бизнес-приложение (домен) стоит усилий для хранилища по следующим причинам:

    1. Тестируемые
    2. Незнание источника данных
    3. Используйте интерфейсы для адаптации источника данных к вашему домену
  • Небольшие приложения (в основном CRUD) просто пойти с активным хранилищем записей может перебить.

Я использую активную запись Yii2, оформленную в реализации репозитория, в действительности с Yii2 вы можете иметь реальную реализацию репозитория, потому что вы можете использовать ActiveQuery вместо самого класса ActiveRecord, ActiveQuery может возвращать необработанные данные массива:

namespace app\clean\infrastructure;
class ActiveRepository implements ActiveRepositoryInterface
{
protected $activeRecordClass;
protected $query;
protected $factory;

function __construct($activeRecordClass)
{
$this->query = new ActiveQuery($activeRecordClass);
$this->factory = new TheEntityFactoy;
}

public function findAll(){
$data = $this->query->asArray()->all();
return $this->factory->create($data);
}}
1