我正在研究Laravel项目,并希望在我的项目中实现Factory和Repository模式。但是,我仍然不知道应该在哪里使用Factory模式?仍然很混乱。我知道没有必要对每个项目都使用Factory模式,但是作为研究的一部分,我想了解更多有关这两种模式的组合的信息。这是我的代码示例。希望我能得到你们的帮助和解释。谢谢。
class ProductFactory
{
public function create()
{
return new Product;
}
}
class ProductRepository implements ProductRepositoryInterface
{
protected $productFactory;
public function __contruct(
ProductFactory $productFactory
)
{
$this->productFactory = $productFactory
}
public function all()
{
return Product::all();
}
public function loadById($id);
{
return Product::find($id);
}
public function save($data,$id=NULL)
{
if($id != NULL){
$product = $this->loadById($id)
}
else{
$product = $this->productFactory->create();
}
return $product->fill($data)->save();
}
.....
}
答案 0 :(得分:0)
我认为您需要拆分工厂和存储库。例如:
R=2
但是对于存储库中的DI来说不是必需的,您的方法(如all(),find()等)都放在AbstractRepository中。您的产品信息库:
class ProductRepository implements ProductRepositoryInterface
{
protected $product;
public function __contruct(Product $product)
{
$this->product = $product;
}
//...
}
如果要编写测试,可以使用laravel容器: AppServiceProvider:
class ProductRepository extends AbstractRepository implements ProductRepositoryInterface
{
public function __contruct()
{
//model property in AbstractRepository
$this->model = new Product();
}
}
ProductRepository:
$this->app->bind(Product::class, function ($app) {
return new Product();
});
PS:我认为工厂没有用,在大多数情况下,我使用容器。但是在某些困难的情况下,我使用工厂,例如:
$this->model = app()->make(Product::class);