【发布时间】:2009-09-30 16:30:16
【问题描述】:
我有一个基于简单 MVC 原理的 PHP 站点。我目前有一个模型文件,其中包含许多用于从数据库获取数据的功能。然而,它现在变得有点单一,所以我想把它分成单独的模型。问题是 - 最好的方法是什么?
为每个表创建一个类是否是个好主意,这样我就可以返回一个对象或对象数组(例如,文章列表)?还是动态创建对象/数组更简单?
【问题讨论】:
标签: php model-view-controller model
我有一个基于简单 MVC 原理的 PHP 站点。我目前有一个模型文件,其中包含许多用于从数据库获取数据的功能。然而,它现在变得有点单一,所以我想把它分成单独的模型。问题是 - 最好的方法是什么?
为每个表创建一个类是否是个好主意,这样我就可以返回一个对象或对象数组(例如,文章列表)?还是动态创建对象/数组更简单?
【问题讨论】:
标签: php model-view-controller model
我会为每个表创建一个模型。如您所知,单片表在未来 6 个月内保持不变是一场噩梦。
就 valya 的例子而言: 我将创建一个用户模型和一个婚姻模型,在它调用婚姻模型的 isMarried() 等自定义函数之上具有所有常用的插入/编辑/删除/获取函数。即
class UserModel {
public function isMarried($user_id) {
return $marriages->findById($user_id);
}
}
无论您决定采用哪种方式,都尽量保持简单。从长远来看,简单胜于聪明。
【讨论】:
$UserModel->getUsersByName($name) 这样的函数会返回一个User 对象,这样我就可以访问$User->surname 等。
这取决于:)
我认为为每个对象(而不是每个表)创建一个类是个好主意。例如,如果您有表格:
Users(uid, name, ...)
Marriages(h_uid, w_uid)
用一些方法比如 ->isMarried() 只创建 User 类会很酷
【讨论】:
您可以使用 ORM,例如 Doctrine。
【讨论】:
对于 PHP,我会根据数据使用和访问模式创建类。拥有一个包含一组“核心”函数的类,这些函数可能在每次点击时使用。然后为应用程序的每个“部分”设置一个类,在需要时加载。
这不是“正确”或最佳的面向对象方法,但它可以降低开销。为每个对象创建一个类会很棒而且很简洁,但是 PHP 必须在每次点击时从头开始加载和创建所有内容。需要加载的文件和创建的对象越多,PHP 就越慢。
您不需要访问十几个不同的文件来响应 Ajax 调用以查明某人是否已婚。
【讨论】:
我会退后一步,在数据库之外查看您的应用程序一秒钟。如果从不涉及数据库,您的应用程序会是什么样子?你的课会叫什么?你会有什么样的对象?他们会怎么做?设计您的应用程序,然后决定应如何保存其数据。
我认为,我所追求的更像是上面提到的每表类设计,尽管我会转而说它是每类表。设计您的系统,然后找出在数据库中表示数据的最佳方式。 Doctrine 是一个很好的系统,但您也可以通过更多手动数据库步骤来完成。
至于所涉及的开销,它实际上取决于您将在每个请求中实例化多少个不同的类。是的,您可以通过使用根本不真正返回对象的通用“提取器”类来节省开销(或者返回的对象是一堆应该是单独的对象的大杂烩),但是参数可以执行到根本不使用任何类型的类。每当您使用任何类型的面向对象编程、函数库或您必须包含的任何其他内容时,肯定会有额外的开销。但是我们没有做单文件PHP站点的原因是因为产生的开销是可以承受的,而且比另一种方式产生的开发人员开销更能承受。
【讨论】: