【问题标题】:Does MVC design means you have to separate mysql from php code?MVC 设计是否意味着您必须将 mysql 与 php 代码分开?
【发布时间】:2013-11-27 14:22:27
【问题描述】:

MVC 真的意味着你必须分开 => 查看又名设计(html css)=> 控制器(php 代码)、模型(mysql 代码到类等)???

没有其他选择吗?想知道,因为我真的很想避免将 php 代码和 mysqli 分开,因为现在处理它很容易(习惯了)。

【问题讨论】:

  • 虽然几乎从不发生,但您的应用程序应该具有足够的可移植性,可以使用问题最少的替代方案(mssql、postgresql 等)来切换持久层(mysql)。尽管移动数据库的实际情况几乎从未发生过,但遵循它会产生积极的潜在结果是一个很好的目标。

标签: php oop model-view-controller mysqli


【解决方案1】:

是的,您肯定希望将 HTML 和 CSS 从业务逻辑中分离出来。

大多数框架使用 ORM 或类似于抽象构建查询的东西,但仍然可以选择编写普通 SQL。例如,我会建议在普通 SQL 上使用类似学说 2 的 ORM。如果您直接使用任何 SQL,模型很可能是放置它的正确位置。

MVC 的存在是有原因的,separation of concerns。这可以确保您的应用程序变得易于维护,因为它的每个部分都应该易于替换,并且不会相互依赖太多。你想避免强耦合。 MVC 是一种可以帮助您的模式。

就像 tttpapi 说的那样,还有其他方法可以做到这一点,但老实说,我个人认为特别是 Wordpress 例如是一个可怕的混乱。我也不喜欢 Drupal 或 Joomla。与遵循 MVC 模式的现代编写良好的应用程序相比,代码库感觉就像处理 10 年前的混乱。

这有点关于纪律,我也见过完全混乱的应用程序,因为人们没有注意关注点分离,也没有遵循 MVC 模式。

【讨论】:

  • 虽然我同意你的说法,但我必须声明 ORM 还不够抽象——根据系统的复杂性,你应该更多地抽象它。基本上,您希望将存储库模式或数据映射器用于真正复杂的系统。业务逻辑根本不应该实现持久性逻辑。
【解决方案2】:

MVC 真的意味着你必须分离 => 查看 aka 设计 (html css) => 控制器(php 代码),模型(mysql 代码到类等)???

没有。

MVC 大约是separation pf concerns。它将表示层与模型层分开。在表示层内——它将输入(控制器)的处理与输出(视图)的处理分开。

MVC 中的模型不是数据库抽象或查询集合。相反,它是一个包含几组类的层。主要群体是domain objectsdata mappersservices。 MVC 中的模型就是所有这些东西的总和。

更长的解释:here

注意:不要将MVC的模型与domain model混淆,后者是为特定应用积累的知识和词汇。可以包含在代码中的领域模型部分是使用领域对象实现的。

View 不是 html 和 css。 MVC 中的视图是包含应用程序 UI 逻辑的类。他们从模型层获取数据,然后根据这些信息选择用于生成响应的模板。

更长的解释:here

控制器不是一些神秘的“php 代码”。它们是接受用户输入的应用程序的一部分,并在此基础上改变模型层的状态和(在极少数情况下)当前视图的状态。

没有其他选择吗?想知道,因为我真的很想 避免分离 php 代码和 mysqli,因为现在很容易 努力工作(习惯了)。

重点不是将 SQL 与 PHP 分开。

separation of concerns 原则仅仅意味着应用程序的每个部分都应该处理一个特定方面。

而且,如果您尝试实现 MVC 架构,这并不意味着您将 sql 与 php 分开,而是将业务逻辑与持久性逻辑分开。两者都将用 PHP 编写。但诀窍是——MySQL 并不是唯一的存储形式。数据还可以存储在会话中、缓存中、noSQL、文件中、SOAP 中等。如果您已将业务逻辑与持久性逻辑分开,那么您可以将缓存添加到现有应用程序中,而无需重写整个内容。

还有……

除了 MVC 和 Big Ball of Mud(谈论 Drupal 和 Joomla 的人宣传的那样)之外,还有更多架构。

您有MVPMVVMn-TierDCIEDA 和许多其他人。而这一切都将秉承SoC的原则......但他们想出的结果会有所不同。

P.S.:如果你真的想了解 MVC,我建议你从 this list 开始阅读资料。它将从介绍简单的概念开始,然后逐步建立您必须掌握的想法才能真正开始使用 MVC。

【讨论】:

    【解决方案3】:

    始终由您决定。 你总能找到如何将 MVC 用作非 MVC 的方法。 (这里的例子是 Joomla,你可以只使用 view 里面的所有代码)

    或者您可以使用不基于 MVC 的系统,例如 Drupal。

    但是 MVC 在这里是出于某些原因。

    【讨论】:

      【解决方案4】:

      要直接回答您的问题,是的,MVC 就是这个意思。 然而,MVC 只是一种设计模式,而不是圣旨。

      您可以使用许多变体。我自己最初认为 MVC 是限制性的和令人困惑的,但实际上是我选择的基于 MVC 的特定框架有这些失败。

      有许多轻量级、灵活的框架可用。看看https://github.com/bcosca/fatfree 作为一个很好的例子,特别是数据库部分。你不会觉得mysqli比较简单

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2015-09-22
        • 2015-03-12
        • 2010-10-17
        • 2022-10-04
        • 1970-01-01
        • 1970-01-01
        • 2011-04-26
        • 1970-01-01
        相关资源
        最近更新 更多