我有一个基于简单MVC原则的PHP站点。我目前有一个模型文件,其中包含许多用于从数据库中获取数据的函数。然而,它现在变得有点单片,所以我想把它分成不同的模型。问题是 - 最好的方法是什么?
为每个表创建一个类是一个好主意,所以我可以返回一个对象或对象数组(比如文章列表)?或者在运行中创建对象/数组更简单吗?
答案 0 :(得分:2)
我会为每个表创建一个Model。如你所知,单片桌是一个噩梦,可以保持6个月的路程。
就valya的例子而言: 我将创建一个用户模型和一个Marriages模型,其中包含所有常用的插入/编辑/删除/获取功能,在isMarried()之类的自定义函数上调用Marriages模型。即
class UserModel {
public function isMarried($user_id) {
return $marriages->findById($user_id);
}
}
无论你决定去哪,都要尽量保持简单。从长远来看,简单比聪明更好。
答案 1 :(得分:1)
取决于:)
我认为为每个对象创建一个类是个好主意(不是为每个表创建)。例如,如果您有表:
Users(uid, name, ...)
Marriages(h_uid, w_uid)
使用某些方法创建User类会很酷,例如 - > isMarried()
答案 2 :(得分:1)
您可以使用ORM,例如Doctrine。
答案 3 :(得分:0)
对于PHP,我会根据数据使用和访问模式创建类。有一个类包含可能在每次命中时使用的“核心”函数集。然后为您的应用的每个“部分”设置一个课程,这将在需要时加载。
这不是“适当的”或最佳的面向对象方法,但它会降低开销。为每个对象创建一个类很棒而且很整洁,但PHP必须在每次点击时从头开始加载和创建所有内容。需要加载的文件和创建的对象越多,PHP就越慢。
您不需要访问十几个不同的文件只是为了响应Ajax调用以查明某人是否已婚。
答案 4 :(得分:0)
我会退一步看看你的应用程序,除了数据库一秒钟。如果从未涉及数据库,您的应用程序会是什么样子?你的课程会被叫什么?你会有什么样的物品?他们会做什么?设计您的应用程序,然后决定如何保留其数据。
我认为,我正在推动的是更像上面提到的每桌一类的设计,尽管我会把它转过来说它是每班一次的表。设计您的系统,然后找出在数据库中表示数据的最佳方式。 Doctrine是一个很好的系统,但你也可以通过更多的手动数据库步骤来完成它。
至于所涉及的开销,它实际上取决于您将在每个请求中实例化多少个不同的类。是的,您可以通过使用通常不会真正返回对象的通用“fetcher”类来节省开销(或者返回对象是一堆应该是独立对象的hodge-pod),但是参数可以完全不使用任何类别的课程。每当您使用任何类型的面向对象编程,或函数库或您必须包含的任何其他内容时,肯定会有额外的开销。但是我们没有制作单文件PHP站点的原因是因为产生的开销是可以承受的,而且比通过其他方式产生的开发人员开销更可忍受。