首頁 後端開發 php教程 数据源架构模式之活动记录_PHP教程

数据源架构模式之活动记录_PHP教程

Jul 13, 2016 pm 05:42 PM
包裝 物件 資料來源 數據表 架構 模式 活動 記錄

  【活动记录的意图】

  一个对象,它包装数据表或视图中某一行,封装数据库访问,并在这些数据上增加了领域逻辑。

  【活动记录的适用场景】

  适用于不太复杂的领域逻辑,如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>
<p align=" left><div style="display:none;">
<span id="url" itemprop="url">http://www.bkjia.com/PHPjc/486087.html</span><span id="indexUrl" itemprop="indexUrl">www.bkjia.com</span><span id="isOriginal" itemprop="isOriginal">true</span><span id="isBasedOnUrl" itemprop="isBasedOnUrl">http://www.bkjia.com/PHPjc/486087.html</span><span id="genre" itemprop="genre">TechArticle</span><span id="description" itemprop="description">【活动记录的意图】 一个对象,它包装数据表或视图中某一行,封装数据库访问,并在这些数据上增加了领域逻辑。 【活动记录的适用场...</span>
</div>
<div class="art_confoot"></div>
</span>
</li>
</ol>
登入後複製
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

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

AI Clothes Remover

AI Clothes Remover

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

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

Video Face Swap

Video Face Swap

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

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發環境

Dreamweaver CS6

Dreamweaver CS6

視覺化網頁開發工具

SublimeText3 Mac版

SublimeText3 Mac版

神級程式碼編輯軟體(SublimeText3)

拼多多買過的東西在哪裡查看記錄 查看買過的商品記錄的方法 拼多多買過的東西在哪裡查看記錄 查看買過的商品記錄的方法 Mar 12, 2024 pm 07:20 PM

拼多多軟體內提供的商品好物非常多,隨時隨地想買就買,而且每一件商品品質都是嚴格把關的,件件商品都是正品,不同還有非常多優惠的購物折扣,讓大家網購根本停不下來。輸入手機號碼在線登錄,在線添加多個收貨地址和聯繫方式,可以隨時查看最新的物流動態,不同品類的商品板塊都是開放的,搜索上下滑動選購下單,足不出戶輕鬆體驗便捷的網購服務,還能查看所有的購買記錄,包括自己買過的商品,數十個購物紅包、優惠券免費領取使用,現在小編在線詳細為拼多多用戶們帶來查看買過的商品記錄的方法。  1.打開手機,點選拼多多圖標,

王者榮耀共赴花期活動攻略大全 王者榮耀共赴花期活動攻略大全 Mar 24, 2024 pm 12:36 PM

王者榮耀開啟了共赴花期活動,玩家參與活動可以免費領取頭像框和超多好禮,活動有時間限制,共為玩家提供了四個關卡,小編今天給大家帶來了共赴花期活動攻略大全,希望能幫助大家完成關卡挑戰。王者榮耀共赴花期活動攻略大全王者榮耀共赴花期活動介紹活動玩法:1、共赴花期是一個翻牌的活動,玩家需要透過翻牌來通關。 2、玩家在活動期間完成任務獲得花露就能夠翻牌。 3.活動面板中每四張通關卡連成一條線(包括橫線、垂直線和對角線)即可通過一個小關卡。 4.每通關一個關卡就能獲得對應的獎勵,同時幫助好友翻牌也能獲得額外獎勵。活

Spring Data JPA 的架構和工作原理是什麼? Spring Data JPA 的架構和工作原理是什麼? Apr 17, 2024 pm 02:48 PM

SpringDataJPA基於JPA架構,透過映射、ORM和事務管理與資料庫互動。其儲存庫提供CRUD操作,派生查詢簡化了資料庫存取。此外,它使用延遲加載,僅在必要時檢索數據,從而提高了效能。

請勿打擾模式在iPhone中不起作用:修復 請勿打擾模式在iPhone中不起作用:修復 Apr 24, 2024 pm 04:50 PM

即使在「請勿打擾」模式下接聽電話也可能是一種非常煩人的體驗。顧名思義,請勿打擾模式可關閉來自郵件、訊息等的所有來電通知和警報。您可以按照這些解決方案集進行修復。修復1–啟用對焦模式在手機上啟用對焦模式。步驟1–從頂部向下滑動以存取控制中心。步驟2–接下來,在手機上啟用「對焦模式」。專注模式可在手機上啟用「請勿打擾」模式。它不會讓您的手機上出現任何來電提醒。修復2–更改對焦模式設定如果對焦模式設定中存在一些問題,則應進行修復。步驟1–打開您的iPhone設定視窗。步驟2–接下來,開啟「對焦」模式設

1.3ms耗時!清華最新開源行動裝置神經網路架構 RepViT 1.3ms耗時!清華最新開源行動裝置神經網路架構 RepViT Mar 11, 2024 pm 12:07 PM

论文地址:https://arxiv.org/abs/2307.09283代码地址:https://github.com/THU-MIG/RepViTRepViT在移动端ViT架构中表现出色,展现出显著的优势。接下来,我们将探讨本研究的贡献所在。文中提到,轻量级ViTs通常比轻量级CNNs在视觉任务上表现得更好,这主要归功于它们的多头自注意力模块(MSHA)可以让模型学习全局表示。然而,轻量级ViTs和轻量级CNNs之间的架构差异尚未得到充分研究。在这项研究中,作者们通过整合轻量级ViTs的有效

重返奧馬哈海灘! 《戰車世界》推出諾曼第紀念活動 重返奧馬哈海灘! 《戰車世界》推出諾曼第紀念活動 May 31, 2024 pm 10:25 PM

諾曼地登陸將迎來80週年紀念,《戰車世界》一整個月的活動和特惠將圍繞著「霸王行動」展開——全新的PvE模式、具有主題的戰鬥通行證、全新前線模式發布,以及為期一個月的諾曼第行動令牌商店即將開啟。行動地圖6月3日至6月30日,探索諾曼第海灘並收集最多90個諾曼第行動代幣:從該地圖上取得36個、透過完成每日任務取得另外54個。查看互動式地圖並了解各個活動的開始日期,然後立即開始取得令牌,或解鎖特殊的令牌任務。利用地圖了解諾曼第行動相關活動的詳情,取得足夠的諾曼第行動代幣後,即可前往諾曼第行動代幣商

golang框架架構的學習曲線有多陡峭? golang框架架構的學習曲線有多陡峭? Jun 05, 2024 pm 06:59 PM

Go框架架構的學習曲線取決於對Go語言和後端開發的熟悉程度以及所選框架的複雜性:對Go語言的基礎知識有較好的理解。具有後端開發經驗會有所幫助。複雜度不同的框架導致學習曲線差異。

如何將 MySQL 查詢結果陣列轉換為物件? 如何將 MySQL 查詢結果陣列轉換為物件? Apr 29, 2024 pm 01:09 PM

將MySQL查詢結果陣列轉換為物件的方法如下:建立一個空物件陣列。循環結果數組並為每一行建立一個新的物件。使用foreach迴圈將每一行的鍵值對賦給新物件的對應屬性。將新物件加入到物件數組中。關閉資料庫連線。

See all articles