我正在为我的数据库开发自己的类模型,我想知道你们对它的看法。
对于我数据库中的每个表,我有2个类。第一个,是一个抓取类(我不知道如何调用它..),这个类有一些静态方法与数据库交互(fetchAll,fetchById等...)。第二个类是模型本身,它包含表的一行的所有方法(插入,更新,删除,验证或行上的任何其他处理)。
每个提取类返回模型对象,如果它是fetchAll,例如,该方法将返回一个模型数组,如果它是一个fetchById,该方法将只返回一个对象,因为id是唯一的。
我将如何使用它的示例:
$users = Users_Map::fetchAll();
foreach($users as $user)
{
echo $user->username.'<br/>';
}
$user = new User_Model();
$user->username = 'example';
$user->insert();
$user = User_Map::fetchById(1);
$user->username = 'example2';
$user->update();
如果您有_Map
以外的任何建议,我会公开。
我想知道这种“模式”是否良好,你怎么看待它,我怎么能改进它,我错了吗?我应该只在_Model
使用静态和非静态方法吗?
非常感谢您的帮助/建议!
答案 0 :(得分:1)
这是我在许多应用程序中使用的模型,尽管为了简单起见,我将fetch-style方法组合到与insert()
类型方法相同的类中。这在使用后期绑定静态成员的PHP 5.3中特别容易,因此您的超类定义的fetchById
映射可以访问子类定义的table_name
变量(例如)。
答案 1 :(得分:1)
从你所描述的内容听起来很合理,但是当你开始认真地扩展它时,真正的测试就会到来。
我通常会构建三个类的核心:
每个表从对象类派生一个表示表中的一行,以及从表示部分或全部表的集合派生的类,并将按要求返回单个对象。还有一个静态的“注册”功能,用于为每个班级设置一次所有必要的信息(表名,有效字段等)。
有时,集合类也是另一个表的对象。很久以前我写的通用对象和注册机制无缝地处理了这个问题。