本文介绍了表数据网关的定义与作用,它是一种设计模式,用于在应用程序和数据库之间传输数据。文章还详细解释了网关类的功能以及其在应用程序中的应用场景。阅读本文能够对表数据网关有更深入的了解,并了解它如何与数据库交互以及在业务类中的应用。
什么是表数据网关?
表数据网关是一种设计模式,它由在应用程序和数据库之间传输数据的类表示。因此,类只有持久化方法作为操作,即数据记录。
我们还将有另一个类,它是应用程序的业务类,每当需要在数据库中搜索或保存数据时就使用网关类。
在大多数情况下,表数据网关处理关系模型,与数据库的主表具有 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 类:
<?php class ProductGateway { private static $conn; public function __construct() { } public static function setConnection(PDO $conn) { self::$conn = $conn; } public function find($id, $class = 'stdClass') { $sql = "SELECT * FROM product WHERE id = '$id'"; print "$sql <br>"; $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 <br>"; $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 <br>"; 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 <br>"; return self::$conn->exec($sql); } }
第 5 步 - 产品类别:
<?php class Product { private $data; public function __construct() { } public static function setConnection( PDO $conn) { ProductGateway::setConnection($conn); } public function __get($prop) { return $this->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; } }
测试
<?php require_once 'class/Product.php'; require_once 'class/ProductGateway.php'; try { $ini = parse_ini_file('config/config.ini'); $dbname = $ini['name']; $conn = new PDO('sqlite:'.$dbname); $conn->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 . "<br>"; }
经营方式:
文章来源:https://www.toymoban.com/article/417.html
$p = $product::find(1); $p->registerPurchase(24,2); //(cost,quantity) $p->save($product); print $p->getProfitMargin();
文章来源地址https://www.toymoban.com/article/417.html
到此这篇关于了解表数据网关的工作原理与应用场景 | PHP 设计模式:表数据网关的文章就介绍到这了,更多相关内容可以在右上角搜索或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!