存储库模式设计

时间:2015-03-05 19:37:01

标签: laravel architecture repository repository-pattern

我正在将包含控制器的代码重构为存储库设计。

我发现困难的部分,考虑特定域/功能的责任。

我有一个ExchangeController,其trade方法。在此方法中,可以使用另一个Shift更改Shift

所以我考虑使用交易方法ExchangeRepository,但是我必须检索Shift

直接从模型(Shift)检索Shift::find($id)是不是不好做法,而是通过调用$shiftRepository->get($shiftId)来封装它?

我开始学习它,但有时很难搞清楚一些事情。 尝试将大多数事物封装到自己的内容中,而不仅仅是为模型进行扩展,这是一种好的做法吗?

我希望它有点清楚,哈哈......

1 个答案:

答案 0 :(得分:0)

存储库的主要思想是隐藏其他代码的数据库操作。您不需要为每个模型或每个表都有一个存储库。这将导致非常严重的后果:无法对数据库执行复杂查询。你必须将它们分成小的简单的,每个都对着它自己的表。

  

直接从模型中检索Shift不是不好的做法   (Shift :: find($ id)),但要通过调用来封装它   $ shiftRepository->获得($ shiftId)

我实际上并不喜欢称之为“不良做法”。这完全取决于。

直接在控制器中调用模型收集方法可能看起来更简单,编写速度更快,但随着应用程序复杂性的增加,您将开始遇到麻烦。例如,尝试使用Model::queryMethod()向您的应用程序添加缓存 - 就像通过代码传递的调用一样。

因此,作为摘要,我建议您将查询拆分为存储库。明智地选择存储库。不要注意表名,而应关注应用程序的域逻辑。