如何在PHP中实现多层架构

Tec*_*hie 7 php architecture model-view-controller soa symfony

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

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

我选择了Symfony2作为应用程序中使用的框架.Symfony2内置了MVC架构.并且上述层存在如下.

  • 表示层=>控制器和视图
  • 业务层,服务层=>模型
  • 数据访问层=>也使用模型,但使用Doctrine.

模型由业务层,数据访问层,服务层组成.请参阅下面的图片,该图片借鉴了Martin Fowler的书"企业应用程序架构模式".

服务层图,带有同心圆

我的问题是,

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

更新

以下链接很有帮助

如何在MVC中构建模型?

如何使用PHP构建n层Web架构?

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

MVC应用程序.多层架构如何适应?

在MVC架构中实现服务层

使用Symfony PHP实现3层架构

ter*_*ško 14

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

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

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

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

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

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

My 2 cents