PHP AR開(kāi)發(fā)——更高效的面向?qū)ο缶幊?
Web開(kāi)發(fā)中,面向?qū)ο缶幊桃呀?jīng)成為行業(yè)標(biāo)配,而ORM(Object-Relational Mapping)可持久化框架更是為程序員提供了便利。而在國(guó)內(nèi),ThinkPHP的ORM框架——TP Arbor 扎實(shí)的功能,良好的擴(kuò)展性贏得了廣大程序員的喜愛(ài)。而AR(Active Record)只是ORM的一個(gè)實(shí)現(xiàn)方式,但是從實(shí)現(xiàn)來(lái)看,相比起傳統(tǒng)ORM框架,AR采用領(lǐng)域模型的設(shè)計(jì)理念,對(duì)于以Java為代表的傳統(tǒng)ORM框架,AR把模型感覺(jué)抽象化為領(lǐng)域?qū)ο螅∠顺志没瘜?duì)象與業(yè)務(wù)對(duì)象之間的映射交叉。
AR采用Active Record的設(shè)計(jì)模式,對(duì)于使用者來(lái)說(shuō),這種模式更加人性化。上代碼,就能很好的展示出這一點(diǎn)。
假設(shè)有一個(gè)User表:
pre
CREATE TABLE `user` (
`id` int(11) unsigned NOT NULL AUTO_INCREMENT,
`username` varchar(50) NOT NULL COMMENT '用戶名',
`password` char(32) NOT NULL COMMENT '密碼',
`email` varchar(100) NOT NULL COMMENT '郵箱',
`real_name` varchar(30) DEFAULT '' COMMENT '真實(shí)名稱',
`height` tinyint(4) DEFAULT '0' COMMENT '身高(厘米)',
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='用戶表';
class User extends \think\Model
{
protected $table = 'user';
protected $autoWriteTimestamp = true;
}
$user = new User;
$user->username = 'test';
$user->password = 'test123';
$user->email = 'test@test.com';
$user->save();
這樣就可以完成一次插入操作。可以看到,AR實(shí)質(zhì)上就是采用了命名的領(lǐng)域?qū)ο蟮囊?guī)定方式(即數(shù)據(jù)表的字段名),并映射到了數(shù)據(jù)源的訪問(wèn)上。舉個(gè)例子,如果像拿到user表中id為1的那條數(shù)據(jù)的username。
$user = User::get(1);
echo $user->username;
AR 的ORM就是SQL語(yǔ)句的直接映射,省卻了許多繁瑣的SQL連接,讓開(kāi)發(fā)者更加關(guān)注業(yè)務(wù)和編程,同時(shí)AR還提供了鉤子函數(shù)等接口幫助開(kāi)發(fā)者掌控?cái)?shù)據(jù)源的操作。
同時(shí),在代碼復(fù)雜的情況下,AR的model的關(guān)聯(lián)更是方便。舉個(gè)例子,weibo表(微博表)與 user表(用戶表)。
pre
CREATE TABLE `weibo` (
`id` int(11) unsigned NOT NULL AUTO_INCREMENT,
`content` varchar(140) NOT NULL COMMENT '微博內(nèi)容',
`user_id` int(11) unsigned NOT NULL COMMENT '用戶ID',
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='微博表';
class Weibo extends \think\Model
{
protected $table = 'weibo';
protected $autoWriteTimestamp = true;
public function user()
{
return $this->belongsTo('User');
}
}
那么就可以這樣查詢:
$weibo = Weibo::with('user')->find(1);
echo $weibo->content;
echo $weibo->user->username;
AR的好處不僅是上述的簡(jiǎn)化交互過(guò)程,而且具有更高的代碼抽象能力。
綜上,AR優(yōu)勢(shì)顯然不在于代碼的規(guī)模,不在于其ORM技術(shù)的新穎,而在于它提供了一種可行的領(lǐng)域規(guī)范,為程序員創(chuàng)造了更靈活的編程方式,幫助程序員輕松開(kāi)發(fā)清晰明了的代碼,使開(kāi)發(fā)工作變得更加簡(jiǎn)便。
網(wǎng)站導(dǎo)航
- zblogPHP模板zbpkf
- zblog免費(fèi)模板zblogfree
- zblog模板學(xué)習(xí)zblogxuexi
- zblogPHP仿站zbpfang