如果没有充分理由,我很自豪不接受概念。但我对使用活动记录模式存在疑问。目前我正在使用zend但是说代码Igniter有活动记录。
我不用。因为
但有效记录有
rand
函数更改为random
,活动记录可以为你创建。
活动记录是否具有我失踪的更多功能?你能举出一些活动记录可以节省生命的案例吗?
答案 0 :(得分:2)
在数据库表或视图中包装行的对象,封装数据库访问,并在该数据上添加域逻辑。
这是不 CodeIgniter使用的内容。 CI的AR是basic query object。
ActiveRecord的主要好处是它的简单性。如果您的应用程序主要执行简单的CRUD操作并且您的表结构与ActiveRecord非常接近,那么这是一个不错的选择。在这种情况下,很容易抽象CRUD。并且您仍然可以为其添加手工SQL以进行某些更复杂的行操作。
class User
{
protected static $dbAdapter;
protected $username;
…
public static function findById($id)
{
$result = self::$dbAdapter->query(
sprintf('SELECT * FROM users WHERE id = %d', $id)
);
if($result) {
return new User($result);
}
}
public function create()
{
try {
return self::$dbAdapter->query(
sprintf(
'INSERT into users …',
$this->username,
…
);
);
} catch …
}
…
}
你可以在你的应用程序中使用它:
$john = User::findById(123);
echo $user->username; // John
$jane = new User(array(
'username' => 'Jane'
));
$jane->create();
如果你的行和AR不匹配,你肯定不想使用ActiveRecord。 AR是表示数据库行的对象。 AR将对象设计与数据库设计相结合。 AR不是ORM。试图将其纳入其中是不切实际的。如果您发现需要更多多汁的域模型,您将不会满意,因为它会最终妨碍您的开发,因为对象关系阻抗不匹配。
附加读物: