【问题标题】:How To Implement Multi Layered Architecture in PHP如何在 PHP 中实现多层架构
【发布时间】:2013-09-15 14:30:32
【问题描述】:

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

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

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

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

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

我的问题是,

有没有办法将模型解耦成单独的业务层、数据访问层、服务层?如何在 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

【问题讨论】:

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


    【解决方案1】:

    如果你真的想尝试做一些受 MVC 启发的东西,那么你唯一的选择是 Synfony 和 Zend。其他只是可悲的 Rails 克隆,它们实现了PAC 的一些混蛋。而 Sf2.x 似乎是两者中更好的一个.. 但这就像指出补习班中最聪明的孩子一样。
    除非您有能力并且愿意制作自己的框架,否则 Sf2.x 将是您的最佳选择。

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

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

    不要将其与“领域模型”混淆。领域模型是一种描述客户业务的所有知识和专业知识的想法,用于创建应用程序。通常它将被表示为单独的domain objects 和所述对象的交互。

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

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

    我的 2 美分

    【讨论】:

    • 解释拒绝投票的原因是一种常见的礼貌。这个答案到底有什么问题?
    猜你喜欢
    • 2012-11-27
    • 2015-01-31
    • 2012-03-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-01-03
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多