【问题标题】:Why doesn't PHP need a middle tier, where as other languages do为什么 PHP 不需要中间层,而其他语言则需要
【发布时间】:2012-06-29 14:49:09
【问题描述】:

对于基于 Web 的应用程序,为什么 PHP 不需要中间件来运行 - 而 Java、C# 等语言却需要?

更新

重新措辞:为什么 PHP 不需要中间层或业务层将其与数据库分开,而其他的却需要。

【问题讨论】:

  • 中间件是什么意思?
  • 我知道中间件是什么,但问题仍然没有意义。
  • 命名 Java 或 C# 应用程序需要 PHP 不需要的特定中间件。
  • 我认为 OP 是在问“为什么 PHP 不需要中间层,或者业务以后不需要将它与数据库分开,而其他的需要”。这是一个公平的问题——如果被误导的话。与其关闭它,我想我宁愿看到这个误解得到解决。
  • "对软件应用程序的服务超出了操作系统可用的范围" - 如果您这样定义,PHP 还需要中间件、php 解释器(php 命令行解释器或 web服务器模块)能够执行。操作系统无法自行执行php代码。

标签: c# java php middleware


【解决方案1】:

假设“中间件”一词是指“中间层”或“业务层”,答案是它们都需要它。

例如,没有什么可以阻止您在 C# 中(或者更准确地说,在 .Net Framework“堆栈”中)在直接访问数据库的网页中编写代码。事实上,很多原型都是这样开始的。

这里的问题更多是关于良好实践 - 通常认为编写直接访问数据库的网页(坚持相同的示例)是一件坏事(tm),其原因有很多。可测试性、安全性、良好的解耦代码 - 所有这些都要求您将代码分开,而拥有多个层是实现此目的的自然方式。

为什么您在 PHP 中看不到这么多?我认为Jeff's latest blog post 很好地涵盖了这一点:)

我想说的是 C#(语言)、.Net(框架)、ASP.NET(尤其是 ASP.NET MVC)以及许多文档和教程都鼓励您做正确的事情而不是将整个网页从网页打到数据库。

但实际上没有什么能阻止你这样做。

【讨论】:

    【解决方案2】:

    可以出现的用例如下:

    您有多个 Web 应用程序提供存储在数据库中的数据。假设网络应用是:

    1. 桌面网络体验的前端
    2. 移动网络体验的前端
    3. 您向开发人员公开的 API 前端

    假设每个前端都直接访问数据库。 然后,您的工程团队决定更换当前数据库。现在你遇到了在 every 前端重写代码的问题。

    如果您有一个中间层来抽象实际数据存储,您只需重新编写一层代码。此外,对该中间层进行单元测试将确保中间层公开数据的方式保持一致,而与数据存储平台无关。

    【讨论】:

      猜你喜欢
      • 2014-05-30
      • 1970-01-01
      • 2018-05-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-01-28
      • 1970-01-01
      相关资源
      最近更新 更多