Ayd*_*san 4 php error-handling model-view-controller logging zend-framework2
或者任何框架.
以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);
}
}
}
?>
Run Code Online (Sandbox Code Playgroud)
我应该在这里登录吗?我应该将记录器绑在表类中吗?如果插入失败并且在控制器中捕获并记录在那里,我是否应该让saveUserContact函数抛出异常?
什么是最佳做法?
我最初的想法是创建一个带有一些常量错误消息的类,例如记录器在表类中使用的插入和更新失败,但我不确定这里的正确过程是什么.
这并不仅限于PHP或Zend Framework 2,但恰好是我正在使用的语言.
我认为系统的各个组件应该尽可能地分离.所以在这个例子中,如果saveUserContact碰巧失败,那么它应该可能导致抛出异常,因为这不是预期的行为.这个类不需要知道"进一步向上"会发生什么,例如错误记录.
正如您所提到的,最好抛出异常并将其捕获到您的控制器(或者其他形式的侦听器)中,然后处理日志记录.
这种方法的好处是您的系统将更容易测试,因为在构造要测试的UserContactsTable(模拟)对象时,您将拥有更少的存根对象.
| 归档时间: |
|
| 查看次数: |
743 次 |
| 最近记录: |