【问题标题】:Is there a (simple) way to separate models in pure PHP, and what is a good way of doing it?有没有一种(简单的)方法可以在纯 PHP 中分离模型,有什么好的方法呢?
【发布时间】:2012-11-15 19:31:29
【问题描述】:

我正在寻找一种从构成网站的一组 PHP 文件中删除模型的方法。 (对我来说)很难解释。

我所说的模型是指 MVC 意义上的模型。

例如说我有这个网站:

  • index.php
  • about.php
  • shop.php
  • checkout.php

以上所有 PHP 文件都使用相同的数据库。我通过使用 view.php 文件添加模板来分离视图,该文件呈现正确的模板并传递给它的值。

希望使用已经存在的框架。我正在考虑在某种意义上写我自己的,只有我需要在其中使用的位。

如果有人想解释为什么这不是必需的,或者更好的做事方式,那么我也愿意。

提前致谢。

【问题讨论】:

    标签: php database oop frameworks


    【解决方案1】:

    编写自己的 MVC 框架需要时间,但在此过程中您会学到很多东西。所以,如果你有时间/资源去做,我绝对鼓励你这样做。 在这种情况下,这里有一些小建议可能会对您有所帮助:

    • 首先创建您的域模型。我假设您将采用 OO 方式,因此请考虑您的域问题并创建最能代表您的问题的抽象。尽量让它与cross-cutting concerns 解耦,就像持久性一样。
    • 大量测试,经常测试。在创建域模型时尝试测试(并运行测试)。当您在 6 个月内添加新功能并希望确保您没有破坏任何东西时,这将特别有价值。如果您可以将您的域模型与任何外部(如持久层或第三方 Web 服务)分开,那么测试将会简单得多。今天PHPUnit 几乎是 PHP 单元测试的事实标准。
    • 您不必从头开始编写所有内容。有很多库可以帮助您简化 MVC 框架的开发,以便您可以专注于您真正想要开发的内容。例如,您可以使用Slim 来处理页面路由,或者您可以将持久性内容委托给Doctrine 2
    • 分析其他框架如何解决问题总是很好的。您可能想查看SymfonyKohana 之类的产品,甚至查看Elgg 如何处理其视图系统。此外,如果您想了解一些完全不同的东西,可以查看 Seaside 的架构。

    回到你原来的问题,对我来说,关键是让不同层的事情尽可能地解耦。虽然我只使用了版本 1,但 Doctrine 2 似乎是一个很好的持久化候选者,因为它允许您创建一个完全独立于数据库的域模型。这是一大步。第二件事是如何处理视图系统。这完全取决于开发人员的口味。例如,我喜欢用对象建模一切,所以我喜欢 Seaside 的方法。另一方面,Elgg 处理视图的方式非常好,并且可能更适合 PHP 中处理事物的方式。在决定要走的路线之前,您可以在此进行一些研究。

    HTH

    【讨论】:

      【解决方案2】:

      作为一个编写了自己的 PHP 框架的人,并且和你一样敏感,我可以告诉你,使用框架是一件好事。也就是说,从编写自己的代码开始 - 您将对框架的真正结构和实用性有更多的了解。

      你会想了解Singletonobjectpattern。它是您可以在框架中开发的对象种类的主要区别。

      当您编写了一些您的文件/控制器(假设 MVC)包含的模型后,您将开始了解从何处抽象其他扩展的“基本模式”(提示:DB 单例)。

      当您开始引入配置等时,您将拥有您的第一个框架对象,所有其他基础都将从中进行扩展。

      【讨论】:

      • 单例是一种反模式。另见dependency injection
      • @Charles 这不是一个智能工程命题。每种模式都适用于某个地方或另一个地方。对于一个非常简单的框架,DB 单例是一个很好的解决方案。
      • 单例很少适用于任何现代 PHP 框架。如果需要全局,请使用全局。您可以获得相同的高度耦合的难以测试的结果,而不会产生愚蠢的开销。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-11-03
      • 1970-01-01
      • 1970-01-01
      • 2010-09-24
      • 1970-01-01
      • 1970-01-01
      • 2010-09-06
      相关资源
      最近更新 更多