我正在与Laravel项目合作,我正在寻找一种方法来解决臃肿的模型和交叉参考他们之间的问题。
我已经开始将更高级别的方法提取到存储库中,但这并不能解决一个方法需要了解另一个方法的问题。
例如,任务查找方法需要首先在另一个表中查找段塞。我不认为我应该将这些代码放置到模型或存储库中,但是我希望有一种方法来实现这种查找。
/Models/Slug
/Models/Task
/Repositories/SlugRepository
/Repositories/TaskRepository我现在已经开始尝试添加一个具有更高级别方法的网关/服务层,这些方法可以访问两个底层存储库来完成任务。
任务服务将依赖于上面的两个存储库。
/Service/Task
findBySlug()我认为这是可行的,但我不确定现在是否应该让控制器直接访问存储库,或者强制通过服务/网关层进行所有操作。
或者完全取消存储库,让服务直接访问模型(Laravel抽象数据库访问)。
最重要的是,我想让这件事尽可能简单!
是否有人能确认这种方法是一个好的选择,或者建议另一种方法?
发布于 2016-02-16 19:58:27
最后,为了保持简单,我选择了一个任务存储库和一个片段服务。段塞查找需要访问另一个模型,这就是为什么我把它带到服务而不是存储库。
我相信,这种设置保持了正确的分离,因为存储库不需要了解其他模型的任何信息,而且还可以将查找逻辑提取到更易于管理的位置。
发布于 2017-09-09 11:13:11
存储库是域层的一部分。它如何实现其目标是在基础设施层。例如,像Task getTask(SlugId id)这样的方法可以完美地放在任务存储库中。现在,存储库的实现可以使用TaskDAO和SlugDAO来工作。
https://softwareengineering.stackexchange.com/questions/309720
复制相似问题