了解表数据网关的工作原理与应用场景 | PHP 设计模式:表数据网关

935次阅读
没有评论

共计 688 个字符,预计需要花费 2 分钟才能阅读完成。

本文介绍了表数据网关的定义与作用,它是一种设计模式,用于在应用程序和数据库之间传输数据。文章还详细解释了网关类的功能以及其在应用程序中的应用场景。阅读本文能够对表数据网关有更深入的了解,并了解它如何与数据库交互以及在业务类中的应用。

什么是表数据网关?

表数据网关是一种设计模式,它由在应用程序和数据库之间传输数据的类表示。因此,类只有持久化方法作为操作,即数据记录。

网关类

我们还将有另一个类,它是应用程序的业务类,每当需要在数据库中搜索或保存数据时就使用网关类。

产品类别

在大多数情况下,表数据网关处理关系模型,与数据库的主表具有 1:1 的关系。

关系模型

例子

第 1 步 – 目录系统:

📦Table_Data_Gateway
 ┣ 📂class
 ┃ ┣ 📜Product.php
 ┃ ┗ 📜ProductGateway.php
 ┣ 📂config
 ┃ ┗ 📜config.ini
 ┣ 📂database
 ┃ ┗ 📜product.db
 ┗ 📜index.php

第 2 步 – 数据库配置文件:

host =
name = database/product.db
user =
pass =
type = sqlite

第 3 步 – 数据库:

CREATE TABLE product(
  id INTEGER PRIMARY KEY NOT NULL,
  description TEXT,
  stock FLOAT,
  cost_price FLOAT,
  sale_price FLOAT,
  bar_code TEXT,
  date_register DATE,
  origin CHAR(1)
);

第 4 步 – ProductGateway 类:

";
        $result = self::$conn->query($sql);
        return $result->fetchObject($class);
    }

    public function all($filter = '', $class ='stdClass')
    {
        $sql = "SELECT * FROM product";

        if($filter)
        {$sql .= "WHERE $filter";}

        print "$sql 
";         $result = self::$conn->query($sql);         return $result->fetchAll(PDO::FETCH_CLASS, $class);     }     public function delete($id)     {         $sql = "DELETE FROM product WHERE id ='$id'";         print "$sql 
";         return self::$conn->query($sql);     }     public function save($data)     {if( empty($data->id) )         {             $sql = "INSERT INTO product                             (description, stock, cost_price, sale_price, bar_code, date_register, origin)                             VALUES                             ('{$data->description}',{$data->stock},{$data->cost_price},{$data->sale_price},                                 {$data->bar_code},'{$data->date-register}','{$data->origin}')";         }         else         {             $sql = "UPDATE product SET                              description = '{$data->description}', stock = '{$data->stock}', cost_price = '{$data->cost_price}',                             sale_price = '{$data->sale_price}', bar_code = '{$data->bar_code}', date_register = '{$data->date_register}',                             origin = '{$data->origin}'                             WHERE id = '{$data->id}'";         }         print "$sql 
";         return self::$conn->exec($sql);     } }

第 5 步 – 产品类别:

data[$prop];
        }

        public function __set($prop, $value)
        {$this->data[$prop] = $value;
        }

        public static function find($id)
        {
            $gw = new ProductGateway;
          return $gw->find($id, 'Product');
        }

        public static function all($filter = '')
        {
            $gw = new ProductGateway;
          return $gw->all($filter, 'Product');
        }

        public function save()
        {
            $gw = new ProductGateway;
            return $gw->save((object) $this->data);
        }

        public function delete()
        {
            $gw =  new ProductGateway;
            return $gw->delete($this->id);
        }

        public function getProfitMargin()
        {return (($this->sale_price - $this->cost_price)/$this->cost_price)*100;
        }

        public function registerPurchase($cost, $quantity)
        {$this->cost_price = $cost;
            $this->stock += $quantity;
        }

    }

测试

setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);

    Product::setConnection($conn);
    $product = new Product;

}
catch(Exception $e)
{print $e->getMessage();}

在数据库中记录产品:

$product->description = 'Juice';
$product->stock = 8;
$product->cost_price = 12;
$product->sale_price = 18;
$product->bar_code = '123123123';
$product->origin = 'S';
$product->date_register = date('Y-m-d');
$product->save();

从数据库更新产品:

$update = $product::find(1);
$update->description = "Grape Juice";
$update->save($product);

列出产品:

foreach($product::all() as $p )
{print $p->description . ' ';
  print $p->cost_price . ' ';
  print $p->sale_price . "
"; }

经营方式:

$p = $product::find(1);
$p->registerPurchase(24,2); //(cost,quantity)
$p->save($product);

print $p->getProfitMargin();

文章来源地址 https://www.toymoban.com/diary/php/417.html

到此这篇关于了解表数据网关的工作原理与应用场景 | PHP 设计模式: 表数据网关的文章就介绍到这了, 更多相关内容可以在右上角搜索或继续浏览下面的相关文章,希望大家以后多多支持 TOY 模板网!

原文地址:https://www.toymoban.com/diary/php/417.html

如若转载,请注明出处:如若内容造成侵权 / 违法违规 / 事实不符,请联系站长进行投诉反馈,一经查实,立即删除!

    正文完
     0
    Yojack
    版权声明:本篇文章由 Yojack 于1970-01-01发表,共计688字。
    转载说明:
    1 本网站名称:优杰开发笔记
    2 本站永久网址:https://yojack.cn
    3 本网站的文章部分内容可能来源于网络,仅供大家学习与参考,如有侵权,请联系站长进行删除处理。
    4 本站一切资源不代表本站立场,并不代表本站赞同其观点和对其真实性负责。
    5 本站所有内容均可转载及分享, 但请注明出处
    6 我们始终尊重原创作者的版权,所有文章在发布时,均尽可能注明出处与作者。
    7 站长邮箱:laylwenl@gmail.com
    评论(没有评论)