【发布时间】:2015-05-01 23:00:49
【问题描述】:
当使用存储库模式时,我们有接口和一些实现该接口的存储库类。如果我没记错的话,SOLID 原则之一是说这些存储库类应该为每个接口方法返回相同类型的数据,这样如果我们切换接口的实现,就不会发生任何故障。
如果我有一个 eloquent 存储库类,它返回一个包含所有用户的 eloquent 类的数组,例如 return User::all(),我没有一个简单的数组,而是一个 Eloquent 模型数组。因此,我可能想使用toArray() 返回简单数组,这样如果我将接口的实现切换到其他一些 ORM(例如 UserDoctrineRepository 或我不知道......)一切仍然有效。
如果我理解正确,在 UserEloquentRepository 中,我们使用了一个 eloquent 模型类来帮助我们使用 Eloquent 获取数据。但是,在我的模型(User 类)中,我可能有一些辅助方法,例如 getFullName()。如果我在 UserEloquentRepository 中简单地使用toArray(),我将不会在我的控制器中获得这个辅助方法,最终在我的视图中。
在我读过的其他文章中,他们将其保留为 return User::all(),但是,这意味着我仍然与 Eloquent 耦合,因为我没有得到一个简单的数组,而是一个 eloquent 对象数组
【问题讨论】:
标签: laravel repository-pattern laravel-5 solid-principles