代码之家  ›  专栏  ›  技术社区  ›  tom

当使用条令2和Zend框架时,业务逻辑应该放在哪里

  •  9
  • tom  · 技术社区  · 15 年前

    如果默认情况下使用没有条令的Zend框架,则将业务逻辑放在模型中。但由于条令2确实有实体,业务逻辑应该放在哪里?

    我首先创建了实体管理器调用实体的模型。但是当我想为我的模型编写单元测试而不需要数据库调用时。我需要将实体管理器移动到控制器。但是我的控制器中有一个不好的业务逻辑。

            $customerAddress = $this->_model->save($values, $id);
    
            $this->_em->persist($customerAddress);
    
            // Update default billing address
            $defaultBilling = $this->_model->saveDefaultBilling($values, $customerAddress);
            if ($defaultBilling != FALSE) {
                $this->_em->persist($defaultBilling);
            }
    
            // Update default shipping address
            $defaultShipping = $this->_model->saveDefaultShipping($values, $customerAddress);
            if ($defaultShipping != FALSE) {
                $this->_em->persist($defaultShipping);
            }
    
            $this->_em->flush();
    

    有人能说说这个问题的最佳做法是什么吗?谢谢

    2 回复  |  直到 15 年前
        1
  •  13
  •   Bryan M.    15 年前

    我不确定是否有一个商定的最佳实践,但在讨论条令或Zend框架时,我看到了很多关于服务层的讨论。

    当我用条令启动我的应用程序时,我试图在实体对象中构建尽可能多的功能,但很快就意识到,如果不注入实体管理器,这几乎是不可能的,这完全打破了条令2如此出色的简单、非持久性感知对象的想法。

    相反,请考虑应用程序中的不同层。条令是一个位于数据库之上的层,实体位于条令之上,服务层应该位于实体之上。整个包就是MVC中的M,它包括数据持久性和业务逻辑。

    presentation 关于这个话题。

    我最初错过了您提到的有单独的模型对象调用实体的部分。我认为这是一个可以接受的模式。如果您想编写测试而不进行数据库调用,那么您可能需要使用实体管理器的模拟——不管您将它放在哪个层,它都是一个依赖项。

    推荐文章