PHP Mapper Pattern,多对多关系
作者:互联网
使用映射器模式时,为多对多关系定义类的最佳实践是什么.
例如,假设我们有产品和类别以及Product_Categories的表格
以下是产品和类别的一些基本骨架.每个都有一个对象类,每个都有一个Mapper.
产品对象&产品映射器:
class Product
{
public $product_id;
public $name;
public function __construct($product_id = false, $name = false)
{
$this->product_id = $product_id;
$this->name = $name;
}
}
class Product_Mapper
{
private $_db;
public function __construct($_db) {}
public function getProducts() {}
public function getProductById($product_id) {}
public function insert(Product $product) {}
public function save(Product $product) {}
public function update(Product $product) {}
public function delete(Product $product) {}
}
类别对象和类别映射器
class Category
{
public $category_id;
public $name;
public function __construct($category_id = false, $name = false)
{
$this->category_id = $category_id;
$this->name = $name;
}
}
class Category_Mapper
{
private $_db;
public function __construct($_db) {}
public function getCategories() {}
public function getCategoryById($product_id) {}
public function insert(Category $category) {}
public function save(Category $category) {}
public function update(Category $category) {}
public function delete(Category $category) {}
}
这里缺少的是能够将产品添加到类别以及更新/删除/选择类别中的产品等.
是否会违反此模式,在Product_Mapper中创建一个名为addCategory,deleteCategory,getProductsByCategoryId的方法,或者您是否会使用名为Product_Categories的映射器创建一个新对象来处理这些函数?
真的很感激任何反馈.我可以看到任何一种方式都适合,但是没有创建新类,我也可以看到产品类在构建新关系时变得臃肿.
解决方法:
关于这一点:
Would it be going against this pattern, to create a methods within Product_Mapper called “addCategory”, “deleteCategory”,
是的,不.它实际上与DataMapper无关.
那些应该被认为是产品方法;例如:
$oProduct->addCategory( $oCategory );
然后,当您使用datamapper保存产品时,数据映射器将添加该产品与您添加到其中的类别之间的关系.
$oProductMapper->save( $oProduct );
标签:php,oop,datamapper 来源: https://codeday.me/bug/20190709/1417318.html