gpt4 book ai didi

php - 如何有效处理业务逻辑错误?

转载 作者:行者123 更新时间:2023-12-03 08:01:03 25 4
gpt4 key购买 nike

假设我们有一些通过合成构建的对象层次结构。是否有任何模式可以在内部对象中注册业务逻辑错误并将其传递给上层对象?

我只是对每个级别上的所有这些addErrors和getErrors感到厌倦,我觉得自己做错了什么。

我知道异常,但是我不介意在这种情况下如何使用它们。从技术上讲,业务逻辑错误不是关键情况,这应导致程序执行中断。实际上,根本不应该中断,因为我们需要记录错误并继续前进。

在此先感谢您分享您的智慧和知识)

小片段说明问题:

class ErrorContainer {
private $errors = array();
function addError($error) { if (!is_array($error)) { $this->errors[] = $error;} else { $this->errors = array_merge($this->errors, $error); } }
function getErrors() { return $this->errors[]; }
function hasErrors() { return !empty($this->errors); }
}

class Processor extends ErrorContainer {
function process($account_id, $orders) {
$account = new Account();
if (!$account->loadById($account_id)) { $this->addErrors($account->getErrors);}

foreach ($orders as $order_id) {
$order = new Order();
if (!$order->loadById($order_id)) { $this->addErrors($order->getErrors);}
}
}

return $this->hasErrors();
}

class Account extends ErrorContainer {
function loadById($account_id) {
$account = select_from_database($account_id);
if (!$account) { $this->addError("Account is missing"); }
if (!$account['active']) { $this->addError("Account is inactive"); }
// and so on, some checks may add errors in a cycle

return $this->hasErrors();
}
}

class Order extends ErrorContainer {} // very similar to Account, but has its own checks

//Usage:

$errors = array();
$items = load_items_from_xml($xml);
foreach ($items as $item) {
$processor = new Processor();
if (!$processor->process($item['account_id'], $item['orders'])) {
$errors = array_merge($errors, $processor->getErrors());
}
}

最佳答案

异常不仅在紧急情况下使用,但在您的情况下,使用您现在的错误系统并不是一个坏主意。您可能会考虑使用常量而不是文本来表示错误,并在每个类中定义所有可能的错误常量。

class Account extends ErrorContainer {
const ERR_ACC_MISSING = 0;
const ERR_ACC_INACTIVE = 1;
function loadById($account_id) {
$account = select_from_database($account_id);
if (!$account) { $this->addError(ERR_ACC_MISSING); }
if (!$account['active']) { $this->addError(ERR_ACC_INACTIVE); }
// and so on, some checks may add errors in a cycle

return $this->hasErrors();
}
}

关于php - 如何有效处理业务逻辑错误?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13586679/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com