加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > PHP教程 > 正文

PHP Mapper Pattern,多对多关系

发布时间:2020-12-13 22:33:05 所属栏目:PHP教程 来源:网络整理
导读:使用映射器模式时,为多对多关系定义类的最佳实践是什么. 例如,假设我们有产品和类别以及Product_Categories的表格 以下是产品和类别的一些基本骨架.每个都有一个对象类,每个都有一个Mapper. 产品对象产品映射器: class Product{ public $product_id; public
使用映射器模式时,为多对多关系定义类的最佳实践是什么.

例如,假设我们有产品和类别以及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 );

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读