共计 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 . "
";
}
经营方式:
文章来源:https://www.toymoban.com/diary/php/417.html
$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
如若转载,请注明出处:如若内容造成侵权 / 违法违规 / 事实不符,请联系站长进行投诉反馈,一经查实,立即删除!
正文完