具有高级数据库结构的 PHP 和真正的 MVC 结构

标签 php database model-view-controller

我正忙于开发基于纯 PHP MVC 结构的酒店预订系统的第一阶段。我尝试熟悉 Cake 和 CodeIgniter 等库,但我对自己的控制力如此之少感到不自在。

所以我选择构建我自己的迷你框架,到目前为止它对我来说效果很好。现在,我使用的数据库结构相当复杂。有相当多的多对多关系和一对多关系。我选择不在数据库本身中强制执行任何引用完整性,因为我认为应该在编程级别完成以避免以后的挫折 - 事情并不总是按计划进行,我发现以编程方式弄清楚发生了什么比在带有较少解释性错误消息的 SQL 数据库中

所以,问题的症结所在 - 我正在努力做出的决定是将那些任意 SQL 语句放置在何处以处理我的不同对象之间的关系。

例如,我有两个对象 - 用户和属性。在这种关系中,用户是属性(property)的所有者,这些属性(property)可能包含将要出租的房间。在我的用户对象模型 (MVC) 中,我有“插入”、“删除”、“更新”、“getUser”、“userExists”等方法。我的属性模型中存在类似的方法。

每个模型都扩展了我创建的一个数据库类,以利用与数据库的连接。

在这个结构中,我在哪里以及如何管理这些对象之间的关系?关系是 Properties_has_Users -> 它是多对多的。在哪里为关系创建插入、更新和删除方法?在它自己的对象中称为“Properties_Users_Relationships?在其中一个对象的 Controller 中?

我是这些论坛的新手,事实上,在我三年的开发过程中,我从未在论坛上发过帖子 - 只是阅读它们所以如果您希望我发布其他内容以供引用或让它更清晰。

谢谢

最佳答案

哇,没有冒犯,但你弄得一团糟。 MVC 没有真假之分,只有 MVC 是一种架构模式,与数据库无关。 php 有足够好的 mvc 框架,您可以在其中进行大量控制。

无论如何,您应该有一个持久层来处理所有存储,包括查询、表关系等。业务层将有对酒店预订过程建模的对象。业务对象不知道数据库。最好有一个 DAO 或存储库,它们将实际执行查询并恢复业务对象。

重要为业务概念建模忽略数据库关注点。当您必须保存/加载内容时,请担心数据库。

仅用于查询,您可以拥有一个专门的 Dao/存储库,它将隐藏 wueris 并直接返回 View 的 View 模型。

需要了解的重要事项之一是持久性模型(您在数据库中保存的内容)不同于业务模型(业务概念和流程)。一个只是数据,另一个是行为。 M是多态的,它可以表示数据库结构或 View 数据或业务行为。

也可能是this post将帮助您更好地理解 MVC 的 M。

关于具有高级数据库结构的 PHP 和真正的 MVC 结构,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13217782/

相关文章:

php - 如何在WordPress外部调用wp-posts数据而不获取重复数据

PHP 验证德国税号 (Steueridentifikationsnummer)

sql-server - 使用备份/还原在同一台计算机内创建数据库副本会引发错误 :- The backup set holds a backup of a database

c# - 为什么我提供数据时数据库却添加空值?

php - 消息格式化,使用 PHP 通过 Slack API 发送按钮

mysql - PrestaShopDatabaseException MySQL 服务器在迁移到 VPS 后消失了

java - 如何比较来自两个不同数据库的数据?

php - 我很困惑,构建 MVC 或 MVVM 设计模式的真正方法是什么?

ruby-on-rails - 使用 rails 和backbone.js 使我的应用程序更加干燥

php - 在 Facebook 上发帖,无需 PHP 分享提示