【活动记录的意图】
一个对象,它包装数据表或视图中某一行,封装数据库访问,并在这些数据上增加了领域逻辑。
【活动记录的适用场景】
适用于不太复杂的领域逻辑,如CRUD操作等。
【活动记录的运行机制】
对象既有数据又有行为。其使用最直接的方法,将数据访问逻辑置于领域对象中。
活动记录的本质是一个领域模型,这个领域模型中的类和基数据库中的记录结构应该完全匹配,类的每个域对应表的每一列。
一般来说,活动记录包括如下一些方法:
1、由数据行构造一个活动记录实例;
2、为将来对表的插入构造一个新的实例;
3、用静态查找方法来包装常用的SQL查询和返回活动记录;
4、更新数据库并将活动记录中的数据插入数据库;
5、获取或设置域;
6、实现部分业务逻辑。
【活动记录的优点和缺点】
优点:
1、简单,容易创建并且容易理解。
2、在使用事务脚本时,减少代码复制。
3、可以在改变数据库结构时不改变领域逻辑。
4、基于单个活动记录的派生和测试验证会很有效。
缺点:
1、没有隐藏关系数据库的存在。
2、仅当活动记录对象和数据库中表直接对应时,活动记录才会有效。
3、要求对象的设计和数据库的设计紧耦合,这使得项目中的进一步重构很困难
【活动记录与其它模式】
数据源架构模式之行数据入口:活动记录与行数据入口十分类似。二者的主要差别是行数据入口 仅有数据库访问而活动记录既有数据源逻辑又有领域逻辑。
【活动记录的PHP示例】
<ol class="dp-c"> <li class="alt"><span><span><?php </span></span></span></li> <li><span> </span></li> <li class="alt"> <span class="comment">/** </span> </li> <li><span><span class="comment"> * 企业应用架构 数据源架构模式之活动记录 2010-10-17 sz </span> </span></li> <li class="alt"><span><span class="comment"> * @author phppan.p#gmail.com http://www.phppan.com </span> </span></li> <li><span><span class="comment"> * 哥学社成员(http://www.blog-brother.com/) </span> </span></li> <li class="alt"><span><span class="comment"> * @package architecture </span> </span></li> <li><span><span class="comment"> */</span><span> </span></span></li> <li class="alt"><span> </span></li> <li> <span class="comment">/** </span> </li> <li class="alt"><span><span class="comment"> * 定单类 </span> </span></li> <li><span><span class="comment"> */</span><span> </span></span></li> <li class="alt"> <span class="keyword">class</span><span> Order { </span> </li> <li><span> </span></li> <li class="alt"> <span> </span><span class="comment">/** </span> </li> <li><span><span class="comment"> * 定单ID </span> </span></li> <li class="alt"><span><span class="comment"> * @var <type> </type></span> </span></li> <li><span><span class="comment"> */</span><span> </span></span></li> <li class="alt"> <span> </span><span class="keyword">private</span><span> </span><span class="vars">$_order_id</span><span>; </span> </li> <li><span> </span></li> <li class="alt"> <span> </span><span class="comment">/** </span> </li> <li><span><span class="comment"> * 客户ID </span> </span></li> <li class="alt"><span><span class="comment"> * @var <type> </type></span> </span></li> <li><span><span class="comment"> */</span><span> </span></span></li> <li class="alt"> <span> </span><span class="keyword">private</span><span> </span><span class="vars">$_customer_id</span><span>; </span> </li> <li><span> </span></li> <li class="alt"> <span> </span><span class="comment">/** </span> </li> <li><span><span class="comment"> * 定单金额 </span> </span></li> <li class="alt"><span><span class="comment"> * @var <type> </type></span> </span></li> <li><span><span class="comment"> */</span><span> </span></span></li> <li class="alt"> <span> </span><span class="keyword">private</span><span> </span><span class="vars">$_amount</span><span>; </span> </li> <li><span> </span></li> <li class="alt"> <span> </span><span class="keyword">public</span><span> </span><span class="keyword">function</span><span> __construct(</span><span class="vars">$order_id</span><span>, </span><span class="vars">$customer_id</span><span>, </span><span class="vars">$amount</span><span>) { </span> </li> <li> <span> </span><span class="vars">$this</span><span>->_order_id = </span><span class="vars">$order_id</span><span>; </span> </li> <li class="alt"> <span> </span><span class="vars">$this</span><span>->_customer_id = </span><span class="vars">$customer_id</span><span>; </span> </li> <li> <span> </span><span class="vars">$this</span><span>->_amount = </span><span class="vars">$amount</span><span>; </span> </li> <li class="alt"><span> } </span></li> <li><span> </span></li> <li class="alt"> <span> </span><span class="comment">/** </span> </li> <li><span><span class="comment"> * 实例的删除操作 </span> </span></li> <li class="alt"><span><span class="comment"> */</span><span> </span></span></li> <li> <span> </span><span class="keyword">public</span><span> </span><span class="keyword">function</span><span> </span><span class="func">delete</span><span>() { </span> </li> <li class="alt"> <span> </span><span class="vars">$sql</span><span> = </span><span class="string">"DELETE FROM Order SET WHERE order_id = "</span><span> . </span><span class="vars">$this</span><span>->_order_id . </span><span class="string">" AND customer_id = "</span><span> . </span><span class="vars">$this</span><span>->_customer_id; </span> </li> <li> <span> </span><span class="keyword">return</span><span> DB::query(</span><span class="vars">$sql</span><span>); </span> </li> <li class="alt"><span> } </span></li> <li><span> </span></li> <li class="alt"> <span> </span><span class="comment">/** </span> </li> <li><span><span class="comment"> * 实例的更新操作 </span> </span></li> <li class="alt"><span><span class="comment"> */</span><span> </span></span></li> <li> <span> </span><span class="keyword">public</span><span> </span><span class="keyword">function</span><span> update() { </span> </li> <li class="alt"><span> } </span></li> <li><span> </span></li> <li class="alt"> <span> </span><span class="comment">/** </span> </li> <li><span><span class="comment"> * 插入操作 </span> </span></li> <li class="alt"><span><span class="comment"> */</span><span> </span></span></li> <li> <span> </span><span class="keyword">public</span><span> </span><span class="keywo </p> "></span> </li> </ol>

熱AI工具

Undresser.AI Undress
人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

Video Face Swap
使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱門文章

熱工具

MantisBT
Mantis是一個易於部署的基於Web的缺陷追蹤工具,用於幫助產品缺陷追蹤。它需要PHP、MySQL和一個Web伺服器。請查看我們的演示和託管服務。

SublimeText3 英文版
推薦:為Win版本,支援程式碼提示!

MinGW - Minimalist GNU for Windows
這個專案正在遷移到osdn.net/projects/mingw的過程中,你可以繼續在那裡關注我們。 MinGW:GNU編譯器集合(GCC)的本機Windows移植版本,可自由分發的導入函式庫和用於建置本機Windows應用程式的頭檔;包括對MSVC執行時間的擴展,以支援C99功能。 MinGW的所有軟體都可以在64位元Windows平台上運作。

DVWA
Damn Vulnerable Web App (DVWA) 是一個PHP/MySQL的Web應用程序,非常容易受到攻擊。它的主要目標是成為安全專業人員在合法環境中測試自己的技能和工具的輔助工具,幫助Web開發人員更好地理解保護網路應用程式的過程,並幫助教師/學生在課堂環境中教授/學習Web應用程式安全性。 DVWA的目標是透過簡單直接的介面練習一些最常見的Web漏洞,難度各不相同。請注意,該軟體中

EditPlus 中文破解版
體積小,語法高亮,不支援程式碼提示功能