如何在PHP中实现多层架构

时间:2013-09-11 14:00:51

标签: php symfony model-view-controller architecture soa

我已经确定了在我的应用程序中实现的以下层。据我所知,多层架构更适合企业应用。

  • 表示层
  • 业务层
  • 数据访问层
  • 服务层

我选择Symfony2作为应用程序中使用的框架。 Symfony2内置了MVC架构。以上层次如下。

  • 表示层=>控制器&观点
  • 业务层,服务层=>模型
  • 数据访问层=>也使用模型,但使用Doctrine。

模型由业务层,数据访问层,服务层组成。请参见下面的borrowed from Martin Fowler's book, Patterns of Enterprise Application Architecture图片。

Diagram of service layer, with concentric circles

我的问题是,

有没有办法将模型分离到单独的业务层,数据访问层,服务层?如何在PHP中实现多层架构?我应该使用其他一些框架(如果它只支持分层架构)?

更新

以下链接很有用

How should a model be structured in MVC?

How to build n-layered web architecture with PHP?

What is difference of developing a website in MVC and 3-Tier or N-tier architecture?

MVC application. How does mult-tier architecture fit in?

Implementing a service layer in an MVC architecture

Achieving 3-tier architecture with Symfony PHP

1 个答案:

答案 0 :(得分:13)

  

如果你真的想要尝试创造一些受MVC启发的东西,那么你唯一的选择就是Synfony和Zend。其他人只是悲伤的Rails克隆,实现PAC的一些混蛋。而Sf2.x似乎更好的两个之一..但这就像在补习班中指出最聪明的孩子   除非你能够并愿意制作自己的框架,否则Sf2.x将是你最好的选择。

我认为这里的主要问题是误解了MVC中的“模型”。模型是一个层,而不是任何特定的类或对象。在福勒的书中,“ MVC模型”将三个同心圆组合在一起。

你在MVC中基本上有两个主要层:模型层和表示层。表示层通过服务与模型层交互,使您可以抽象底层域业务逻辑。

请勿将其与“域名模型”混淆。域模型是描述客户业务中用于创建应用程序的所有知识和专业知识的想法。通常它将表示为单独的domain objects以及所述对象的交互。

此外,这张照片有点误导。数据抽象层(通常实现为data mappers的集合)不是域模型的低级结构。域对象和存储抽象都是服务使用(直接或通过存储库和工作单元)。它被称为“应用程序逻辑”,是服务的直接责任。

底线:不,你不需要选择一些不同的框架。您只需要了解有关应用程序架构的更多信息。你应该阅读Patterns of Enterprise Application Architecture ..这将是一个很好的起点。

我的2美分