【问题标题】:Model logic and service layer logic模型逻辑和服务层逻辑
【发布时间】:2012-03-14 02:40:57
【问题描述】:

我最近发现,我正在跨应用程序的多个层进行编码以实现非常简单的事情。

例如

$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();  
}

您认为哪种方法最有效?

【问题讨论】:

    标签: php model-view-controller oop zend-framework


    【解决方案1】:

    将函数包含在模型映射器中有助于避免在应用程序的多个位置重复代码(即强制执行 DRY 原则),并使调试和代码修改大量变得更容易。

    【讨论】:

      【解决方案2】:

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

      【讨论】:

        【解决方案3】:

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

        【讨论】:

          猜你喜欢
          • 2017-08-08
          • 2014-09-04
          • 2016-08-12
          • 2023-04-07
          • 2010-12-18
          • 1970-01-01
          • 1970-01-01
          • 2010-12-24
          • 2011-08-01
          相关资源
          最近更新 更多