gpt4 book ai didi

php - 在 MVC 架构中记录数据库错误的位置

转载 作者:塔克拉玛干 更新时间:2023-11-03 06:09:09 27 4
gpt4 key购买 nike

或与此相关的任何框架。

以 Zend Framework 2 为例,我有以下表类:

<?php

namespace Contact\Model;

use Zend\Db\TableGateway\TableGateway;
use Zend\Db\TableGateway\AbstractTableGateway;
use Zend\Log\Logger;

class UserContactsTable extends AbstractTableGateway
{
protected $tableGateway;

/**
*
* @var \Zend\Log\Logger Instance
*/
protected $logger;

public function __construct(TableGateway $tableGateway, Logger $logger )
{
$this->tableGateway = $tableGateway;
$this->logger = $logger;
}

/**
* Save a contact
*
* @param \Sms\Model\UserContact $userContact
*/
public function saveUserContact(UserContact $userContact)
{
$data = array(
'user_id' => $userContact->user_id,
'contact_id' => $userContact->contact_id
);

try {
$this->tableGateway->insert($data);
} catch (\Exception $e) {
//log
$this->logger->crit($omeErrMsg);

}
}
}
?>

我应该在这里登录吗?我应该将记录器绑定(bind)到表类吗?如果插入失败并在 Controller 中捕获并在那里记录,我是否应该让 saveUserContact 函数抛出异常?

什么是最佳实践?

我最初的想法是创建一个类,其中包含一些常量错误消息,例如记录器在表类中使用的插入和更新失败,但我不确定这里的正确过程是什么。

这并不局限于 PHP 或 Zend Framework 2,而是恰好是我正在使用的语言。

最佳答案

我认为系统的各个组件应该尽可能分离。因此,在此示例中,如果 saveUserContact 碰巧失败,那么它可能会导致抛出异常,因为这不是预期的行为。此类不需要知道“进一步向上”会发生什么,例如错误日志记录。

正如您所提到的,最好抛出异常并将其捕获在您的 Controller (或者可能是某种其他形式的监听器)中,然后 Controller 将处理日志记录。

这种方法的好处是您的系统将更容易测试,因为在构建要测试的 UserContactsTable(模拟)对象时,要 stub 的对象会更少。

关于php - 在 MVC 架构中记录数据库错误的位置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14275974/

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