关于symfony:如何在PHP中实现多层架构

How To Implement Multi Layered Architecture in PHP

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

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

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

  • 表示层=>控制器和视图
  • 业务层、服务层=>模型
  • 数据访问层=>也是模型,但使用了条令。

模型由业务层、数据访问层、服务层组成。请参阅下面的图,这是从MartinFowler的书《企业应用程序体系结构模式》中借来的。

Diagram of service layer, with concentric circles

我的问题是,

有没有一种方法可以将模型分离为单独的业务层、数据访问层和服务层?如何在PHP中实现多层架构?我应该使用其他框架吗(如果它只支持分层架构的话)?

更新

下面的链接很有用

如何在MVC中构建模型?

如何用PHP构建N层Web架构?

在MVC和3层或N层架构中开发网站有什么区别?

MVC应用程序。多层架构是如何适应的?

在MVC体系结构中实现服务层

使用symfony php实现三层架构


If you are serious about even trying to make something MVC-inspired, then your only options are Synfony and Zend. The others are just sad Rails-clones, that implement some bastardization of PAC. And Sf2.x seems to better one of two .. but that's like pointing out smartest kid in the remedial class.
Unless you are able and willing to make your own framework, Sf2.x will be your best bet.

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

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

不要将其与"域模型"混淆。域模型是一个描述客户业务中所有知识和专业知识的概念,用于创建应用程序。通常它将被表示为单独的域对象和所述对象的交互。

而且,这张图片有些误导。数据抽象层(通常作为数据映射器的集合实现)不是域模型的低级结构。域对象和存储抽象都由服务使用(直接使用或通过存储库和工作单元使用)。它被称为"应用程序逻辑",是服务的直接责任。

底线:不,您不需要选择一些不同的框架。您只需要进一步了解应用程序体系结构。您应该阅读企业应用程序体系结构的模式。那将是一个很好的开始。

MY 2中央键盘