PHP數(shù)據(jù)源架構(gòu)模式之表入口模式實(shí)例分析
本文實(shí)例講述了PHP數(shù)據(jù)源架構(gòu)模式之表入口模式。分享給大家供大家參考,具體如下:
martin fowler在《企業(yè)應(yīng)用架構(gòu)模式》一書中將我們平常接觸到的應(yīng)用開發(fā)分為三層:表現(xiàn)層、領(lǐng)域?qū)雍蛿?shù)據(jù)源層。
其中領(lǐng)域?qū)拥念I(lǐng)域邏輯模式有:事務(wù)腳本、領(lǐng)域模型以及表模塊。
1、事務(wù)腳本最容易理解也最易于開發(fā),不過由于易造成代碼重復(fù)等問題,不利于后期的維護(hù),比較適合開發(fā)邏輯較為簡(jiǎn)單的業(yè)務(wù),比如只有幾個(gè)用于展示企業(yè)信息的企業(yè)站等;
2、領(lǐng)域模型是三種模式中最為復(fù)雜的模式,缺點(diǎn)顯而易見,需要較高的學(xué)習(xí)成本,不過優(yōu)點(diǎn)也很鮮明,就是代碼清晰,復(fù)用率高,便于后期的維護(hù),比較適合用于復(fù)雜多變的應(yīng)用情形下;
3、表模塊模式則介于事物腳本和領(lǐng)域模型之間,我們開發(fā)中小型項(xiàng)目時(shí)通常使用的都是表模塊模式。
好了,對(duì)于領(lǐng)域邏輯模式個(gè)人只有以上的粗淺理解,具體等以后加深理解了概念之后再來詳談。
這里想跟大家說一說數(shù)據(jù)源層的數(shù)據(jù)源架構(gòu)模式,主要有四種:表入口模式、行入口模式、活動(dòng)記錄和數(shù)據(jù)映射器。
今天先講最簡(jiǎn)單的表入口模式。
書中對(duì)表入口模式的定義為:充當(dāng)數(shù)據(jù)庫(kù)表訪問入口的對(duì)象,一個(gè)實(shí)例處理表中的所有行。
可以理解為對(duì)之前分散在各個(gè)頁(yè)面的sql語句進(jìn)行封裝,一張表就是一個(gè)對(duì)象,該對(duì)象處理所有與該表有關(guān)的業(yè)務(wù)邏輯,很好的提高了代碼的復(fù)用性。
現(xiàn)在想起來,當(dāng)初剛畢業(yè)那會(huì)兒,經(jīng)常使用表入口模式。
具體的實(shí)現(xiàn)方式參見代碼:
database.php
<?php class Database{ //只是為了演示,通常情況下數(shù)據(jù)庫(kù)的配置是會(huì)單獨(dú)寫在配置文件中的 private static $_dbConfig = array( 'host' => '127.0.0.1', 'username' => 'root', 'pwd' => '', 'dbname' => 'bussiness' ); private static $_instance; public static function getInstance(){ if(is_null(self::$_instance)){ self::$_instance = new mysqli(self::$_dbConfig['host'], self::$_dbConfig['username'], self::$_dbConfig['pwd'], self::$_dbConfig['dbname']); if(self::$_instance->connect_errno){ throw new Exception(self::$_instance->connect_error); } } return self::$_instance; } }
person.php
<?php require_once 'database.php'; class Person extends Database{ public $instance; public $table = 'person'; public function __construct(){ $this->instance = Person::getInstance(); } public function getPersonById($personId){ $sql = "select * from $this->table where id=$personId"; echo $sql; return $this->instance->query($sql); } /**其他的一些增刪改查操作方法...**/ }
index.php
<?php require_once 'person.php'; $person = new Person(); var_dump($person->getPersonById(1)->fetch_assoc()); die();
運(yùn)行結(jié)果:
select * from person where id=1 array (size=2) 'id' => string '1' (length=1) 'name' => string 'ben' (length=3)
更多關(guān)于PHP相關(guān)內(nèi)容感興趣的讀者可查看本站專題:《php面向?qū)ο蟪绦蛟O(shè)計(jì)入門教程》、《PHP數(shù)組(Array)操作技巧大全》、《PHP基本語法入門教程》、《PHP運(yùn)算與運(yùn)算符用法總結(jié)》、《php字符串(string)用法總結(jié)》、《php+mysql數(shù)據(jù)庫(kù)操作入門教程》及《php常見數(shù)據(jù)庫(kù)操作技巧匯總》
希望本文所述對(duì)大家PHP程序設(shè)計(jì)有所幫助。
- PHP程序員簡(jiǎn)單的開展服務(wù)治理架構(gòu)操作詳解(三)
- PHP程序員簡(jiǎn)單的開展服務(wù)治理架構(gòu)操作詳解(二)
- PHP程序員簡(jiǎn)單的開展服務(wù)治理架構(gòu)操作詳解(一)
- PHP架構(gòu)及原理知識(shí)點(diǎn)詳解
- thinkPHP5.0框架整體架構(gòu)總覽【應(yīng)用,模塊,MVC,驅(qū)動(dòng),行為,命名空間等】
- php代碼架構(gòu)的八點(diǎn)注意事項(xiàng)
- 四種php中webservice實(shí)現(xiàn)的簡(jiǎn)單架構(gòu)方法及實(shí)例
- php之深入理解架構(gòu)布局講解
相關(guān)文章
php中使用Curl、socket、file_get_contents三種方法POST提交數(shù)據(jù)
php中使用Curl、socket、file_get_contents三種方法POST提交數(shù)據(jù)的實(shí)現(xiàn)代碼,需要的朋友可以參考下。2011-08-08php運(yùn)行時(shí)動(dòng)態(tài)創(chuàng)建函數(shù)的方法
這篇文章主要介紹了php運(yùn)行時(shí)動(dòng)態(tài)創(chuàng)建函數(shù)的方法,涉及php流程語句與create_function函數(shù)的使用技巧,需要的朋友可以參考下2015-03-03PHP程序61條面向?qū)ο蠓治鲈O(shè)計(jì)的經(jīng)驗(yàn)小結(jié)
你不必嚴(yán)格遵守這些原則,違背它們也不會(huì)被處以宗教刑罰。但你應(yīng)當(dāng)把這些原則看成警鈴,若違背了其中的一條,那么警鈴就會(huì)響起 。 ----- Arthur J.Riel2008-11-11完美解決PHP中的Cannot modify header information 問題
以下是對(duì)PHP中的Cannot modify header information問題的解決方法進(jìn)行了詳細(xì)的分析介紹,需要的朋友可以過來參考下2013-08-08PHP操作Redis數(shù)據(jù)庫(kù)常用方法示例
這篇文章主要介紹了PHP操作Redis數(shù)據(jù)庫(kù)常用方法,結(jié)合實(shí)例形式總結(jié)分析了php針對(duì)redis數(shù)據(jù)庫(kù)連接、字符串、列表、hash字典、set集合等數(shù)據(jù)類型相關(guān)操作技巧,需要的朋友可以參考下2018-08-08PHP列出MySQL中所有數(shù)據(jù)庫(kù)的方法
這篇文章主要介紹了PHP列出MySQL中所有數(shù)據(jù)庫(kù)的方法,涉及php操作數(shù)據(jù)庫(kù)的技巧,非常具有實(shí)用價(jià)值,需要的朋友可以參考下2015-03-03ThinkPHP5+PhpSpreadsheet實(shí)現(xiàn)批量導(dǎo)出數(shù)據(jù)
由于PHPExcel不再維護(hù),所以建議使用PhpSpreadsheet來導(dǎo)出exlcel,但是PhpSpreadsheet由于是個(gè)新的類庫(kù),所以只支持PHP7.1及以上的版本,本文給大家介紹了ThinkPHP5+PhpSpreadsheet實(shí)現(xiàn)批量導(dǎo)出數(shù)據(jù),需要的朋友可以參考下2024-10-10php中使用preg_replace函數(shù)匹配圖片并加上鏈接的方法
preg_replace 執(zhí)行正則表達(dá)式的搜索和替換,如果只是單純的匹配字符串建議使用str_replace(),因?yàn)槠鋱?zhí)行效率高的多2013-02-02PHP7擴(kuò)展開發(fā)教程之Hello World實(shí)現(xiàn)方法示例
這篇文章主要介紹了PHP7擴(kuò)展開發(fā)教程之Hello World實(shí)現(xiàn)方法,結(jié)合實(shí)例形式較為詳細(xì)的分析了針對(duì)php7擴(kuò)展的源碼下載、設(shè)置、代碼編輯及測(cè)試運(yùn)行相關(guān)操作技巧,需要的朋友可以參考下2017-08-08