用Symfony PHP实现三层体系结构


Achieving 3-tier architecture with Symfony PHP

在我迄今为止完成的学校网络项目中,我使用三层方法构建了我的应用程序。数据层、应用程序和表示层。我已经在python和java中使用过这种体系结构,我还想在php中使用它。我对层之间的通信非常严格,因为这些都是任务的要求,我可以说我觉得这很好,因为当我有一次尝试从mySQL切换到Mongo-db时,这很容易。我只需要更改数据访问对象函数中的代码。

正如我之前所说,我现在想用php编写一个更大的应用程序,我下载并安装了Symfony2框架,这是一个MVC框架。我的意图是用MySQL initial测试应用程序,然后用Redis进行切换和测试。

所以我的问题是:我可以使用框架的功能和所有"优点"来编写一个3层架构的应用程序吗?我如何分离这些层?

Symfony2本身并不是一个MVC框架,它只是一堆松散耦合的组件,它们可以很好地协同工作。有一篇来自首席开发人员的博客文章。

您可以选择捆绑包的细粒度,例如,您可以创建一个包含纯域对象、业务逻辑和存储库接口、DAO的捆绑包。您可以选择提供所选ORM的映射配置。现在,您可以为数据访问策略创建捆绑包,比如一个使用条令的捆绑包,另一个使用redis的捆绑包来实现存储库接口。

因此,您可以疯狂地使用细粒度的bundle结构,但对于简单的应用程序,您可以将所有这些都放在/src下,或者只创建一个包含所有在那里实现的数据访问策略的bundle,然后在应用程序中选择一个具有bundle配置的bundle。

研究其他捆绑包的方法也有助于熟悉最佳实践,FOSCommentBundle或FOSUserBundle可能是一个很好的起点。

当然。诀窍是将您的数据层(也称为业务对象)封装在服务中。您的应用程序(也称为控制器)根据用户输入与这些服务交互,并将结果传递到表示层。

仔细构建您的服务,您将能够在不影响控制器或演示的情况下交换数据库层。