模型逻辑和服务层逻辑

问题描述:

我最近发现的是,我正在跨应用程序的多个层进行编码以实现非常简单的事情。模型逻辑和服务层逻辑

例如

$domain = new Application_Model_Domain(); 
$table = $domain->getMapper()->getDbTable(); 
$row = $table->find($id)->current(); 
$row->delete(); 

这可能都很容易可以在delete()方法在我的服务层完成。但是,我一直在将这个功能转移到模型映射器中:

# service layer 
$domain = new Application_Model_Domain(); 
$domain->getMapper()->delete($id); 

# mapper 
function delete($id) { 
    $table = $this->getDbTable(); 
    $row = $table->find($id)->current(); 
    $row->delete(); 
} 

您认为哪种方法最有效?

使您的模型映射器中包含的功能可以帮助您避免在应用程序的多个位置重复代码(即强制执行DRY原则),并使调试和代码修改变得更容易lot

在我看来,所有数据库相关的操作必须在模型层。因此,只需使用现有的模型层,您就可以替换逻辑层,而无需重写相同的代码。

一般来说,最好有一个单独的数据访问层。这是一个众所周知的模式,称为数据访问层(DAO)。因为,如果你仔细想想,数据访问并不属于模型或服务层。服务层可以使用DAO层。