在ORM中使用存储库模式

在ORM中使用存储库模式,orm,repository-pattern,Orm,Repository Pattern,我创建了一个小项目,在这个项目中,我将数据从控制器传递到一个服务类,该服务类使用ORM保存一个对象: 大概是这样的: UserController接收post数据并将其传递给UserService。 UserService创建一个用户对象,并使用$user.save()将其保存到数据库中 现在我在为两件事挣扎: 第一名: 假设我使用存储库添加用户,它将如下所示: 控制器将post数据传递给创建用户对象的服务,并将其传递给存储库。存储库只需调用$user.save(),这不是有点奇怪吗?为什么不在

我创建了一个小项目,在这个项目中,我将数据从控制器传递到一个服务类,该服务类使用ORM保存一个对象:

大概是这样的:
UserController
接收post数据并将其传递给
UserService
UserService
创建一个用户对象,并使用
$user.save()将其保存到数据库中

现在我在为两件事挣扎:

第一名: 假设我使用存储库添加用户,它将如下所示: 控制器将post数据传递给创建用户对象的服务,并将其传递给存储库。存储库只需调用
$user.save()
,这不是有点奇怪吗?为什么不在我的服务中调用save,因为在我看来,使用存储库仅仅调用save方法似乎有些过分

秒: 我了解到,当您使用存储库时,您可以轻松地更改存储方法,因为您的应用程序不知道使用了哪种存储方法。但在将对象传递到存储库之前,必须先创建它。
使用ORM,每一个都有不同的方式:条令使用
$user=new user
,而推进使用
$user=new user()
,idorm使用
$user=ORM::for_table('user')->create()因此,当出于某种原因切换到另一个ORM时,也会在项目中对此进行更改,否?

首先:阅读模型视图和控制器的职责。这里有一个合理的解释,并举例说明:

关于模型和您的ORM,ORM可能存在于模型中。因此,您应该要求您的模型创建一个新对象(可能表示一个表或一系列相关表-您的模型应该理解这些关系)。然后可以将数据传递给模型,然后模型应将数据存储到相应表中的相应列中。举个简单的例子,想象一下创建一个名为“Family”的对象,您可以在其中指定两个父名称,一个可变数量的子名称,然后告诉模型保存此名称。模型可以采用此“家庭”对象,创建一个家庭表记录和5个人表记录,将一些记录标记为家长,其他记录标记为子记录

第二:在我看来,提到的“存储方法”指的是您使用的数据库。例如,我知道spreep支持MySQL、PostgreSql、MSQL、Oracle等。我将配置切换到另一个数据库将自动开始使用新数据库的相应语言