Yii ActiveRecord vs Repository patterns



这些方法既有优点也有缺点。

我正在使用Yii开发一个中型应用程序。

Yii采用了AR模式,并默认支持它。使用存储库模式的优势非常明显,但问题是:我真的应该投入时间来实现与Yii相结合的存储库模式吗?

我也想知道你对这两种模式的看法。我也想知道为什么AR如此受欢迎和频繁使用?在我看来,Repository模式更灵活、更可测试、代码更干净,并且在企业应用程序中集成得更好。

我应该继续使用Yii的AR模式吗?

我也在考虑从Yii换成Laravel。在这一刻,我不会因为这样做而损失太多工作。

对我来说,ActiveRecord在小型项目中相当不错,但对于中型或大型应用程序来说,它很难维护。

Yii ActiveRecord的优点

  1. 使用Yii AR可以加快编码速度所有AR模型和控制器都可以通过gii一键生成
  2. AR非常受欢迎几乎所有的开发人员都熟悉这种模式。新的团队成员更快地投入到项目中

Yii ActiveRecord的缺点

在Yii的情况下,太多的逻辑集中在AR模型类中:

  • 验证
  • 查找方法
  • 业务逻辑

这就产生了代码:

  1. 可读性较差AR类通常由几十个不相关的方法组成。逻辑可以使用行为或特征进行分解。但事实上,它仍然很难维持
  2. 难以测试

当应用程序变得足够大时,需要在Controller和AR模型之间添加一层。存储库是一个不错的选择。至于我,我开始在Laravel中使用存储库,但现在我也在Yii 1/2中使用它。

在Yii中实现存储库实际上不是问题。Yii的AR与Laravel的Eloquent非常相似。强制所有团队成员不要直接使用AR,而是使用存储库要困难得多。

如果你有Laravel的经验,我建议你使用它。

这取决于应用程序的类型:

  • 复杂的业务应用程序(域)值得为存储库付出努力,原因如下:

    1. 可测试
    2. 数据源无知
    3. 使用接口使数据源适应您的域
  • 小型应用程序(基本上是CRUD)只使用活动记录存储库可能会过度使用。

我使用Yii2活动记录装饰在存储库实现中,事实上,使用Yii2,你可以有一个真正的存储库实现,因为你可以使用ActiveQuery而不是ActiveRecord类本身,ActiveQuery可以返回原始数组数据:

namespace appcleaninfrastructure;
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);
   }

}

最新更新