php oop MVC 设计 - 应用程序编辑数据的适当架构

标签 php model-view-controller oop design-patterns

现在我已经阅读了大量关于 OOP、MVC 和设计模式的帖子、文章、问题和答案,但我仍然对构建我想要构建的内容的最佳方式有疑问。

我的小框架是以 MVC 方式构建的。它使用 smarty 作为查看器,我将一个类设置为从 url 调用的 Controller 。

现在我觉得我迷路的地方是模型部分。我可能会过多(或很少)混合使用模型和类/对象。

无论如何,一个例子。当目标是获取驻留在我的数据库中的用户列表时:

应用程序由例如调用“users/list” Controller 然后运行函数列表,打开类“user”的实例并请求该类从表中检索列表。一旦返回到 Controller , Controller 通过将结果集(数组)分配给模板并设置模板将其推送给查看器。 然后,用户将单击表中的一行,该行将告诉 Controller 开始“用户/编辑”,例如,这将创建一个表单并用用户数据填充该表单以供我编辑。

到目前为止还不错。

现在我将所有这些组合到一个用户类中 - 这样该类将具有创建、getMeAListOfUsers、更新等函数以及 hairType 和 noseSize 等属性。 但是适当的 oop 设计会希望我将“用户”(具有登录名、大 Nose 、卷发等属性)与“给我一个用户列表”分开,这更像是一个“用户管理器类”。

如果我要实现一个用户管理器类,它应该是什么样子的?它应该是一个对象(不能真正将它与现实世界的事物进行比较)还是应该是一个只有公共(public)函数的类,这样它或多或少看起来像一组函数。

它应该返回一个已找到记录的数组(例如:array([0]=>array("firstname"=>"dirk", "lastname"=>"diggler")) 或它应该返回一个对象数组吗。

所有这些仍然让我有些困惑,我想知道是否有人可以给我一些关于如何以最佳方式处理这个问题的见解。

最佳答案

处理和数据(业务逻辑)所需的抽象级别取决于您的需要。例如对于带有 Transaction Scripts 的应用程序(您的设计可能就是这种情况),您描述的从数据库中获取和更新数据的类对我来说听起来很有效。

您可以使用 Table Data Gateway 来概括一些事情, Row Data GatewayActive Record甚至。

如果您觉得自己在交易脚本中复制了很多代码,您可能想要创建自己的 Domain ModelData Mapper .但是,我不会从一开始就盲目地这样做,因为这需要更多的代码才能开始。此外,自行编写 Data Mapper 而使用现有组件并不明智。 Doctrine PHP中就是这样一个组件。

另一个现有的 ORM(对象关系映射器)组件是 Propel它提供事件记录

如果您只是在寻找查询数据库的快速方法,您可能会发现 NotORM鼓舞人心。


您可以在

中找到以斜体列出的模式

其中列出了本书 Patterns of Enterprise Application Architecture 中的所有模式.

关于php oop MVC 设计 - 应用程序编辑数据的适当架构,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8604905/

相关文章:

python - 使用 (x,y) 坐标到达特定的 "village"(Python 3)

ruby-on-rails - 我如何确定模型与 Controller 中的内容?

php - 如何在 Laravel 5 中删除单条记录?

php - 为什么 ENUM ("0", "1") 在 Mysql 中保存为空字符串?

php - Android:使用 SSL/HTTPS 与 PHP 连接到数据库并使用 POST/GET

php - 如何在没有框架的情况下将值从 Controller 传递到 PHP 中查看?

javascript - 按事件宽度调用方法 JS OOP(原型(prototype))

c++ - c++ oop指针与继承的关系

PHP GET 控制语句

php - 未找到任何元素 - 尽管 SQL 语句看起来不错