»¶ÓÄú·ÃÎÊÎÒ°®IT¼¼ÊõÍø£¬½ñÌìС±àΪÄã·ÖÏíµÄ±à³Ì¼¼ÊõÊÇ£º¡¾¡¶PHPÉè¼ÆÄ£Ê½½éÉÜ¡·µÚÊ®ÁùÕ Êý¾ÝÓ³Éäģʽ¡¿£¬ÏÂÃæÊÇÏêϸµÄ·ÖÏí£¡
¡¶PHPÉè¼ÆÄ£Ê½½éÉÜ¡·µÚÊ®ÁùÕ Êý¾ÝÓ³Éäģʽ
ǰÁ½Õ¨D¨D¶¯Ì¬Êý¾ÝģʽÓë±íÊý¾ÝÍø¹ØÄ£Ê½¸÷×Ôչʾ¶Ô¼Ç¼Óëÿ¸ö±í½øÐгéÏóµÄ²ßÂÔ¡£ÕâЩģʽ¶¼ºÜÓÐÓ㬵«Ã¿Ò»¸öģʽµÄÖ´Ðж¼Óëµ×²ãµÄÊý¾Ý¿â½á¹¹½áºÏ¹ýÓÚ½ôÃÜ£¬Òò´Ë»ùÓÚÒÔÉÏģʽµÄ½â¾ö·½°¸¾Í´æÔÚÒ»¶¨µÄÎÊÌâ¡£±ÈÈ磬ÄãµÄ´úÂëÓÃ×Ö¶ÎÃû×÷ΪÊý×éµÄ¹Ø¼ü×Ö»òÊÇÐÐÊý¾Ý¶ÔÏóµÄÊôÐÔ£¬ÔòÄãµÄÓ¦ÓþÍÊܵ½Êý¾Ý¿â½á¹¹µÄÔ¼Êø£¬²¢ÇÒÿµ±±í½á¹¹·¢ÉúÄÄÅÂÊǺÜСµÄ±ä»¯£¬Äã¶¼²»µÃ²»ÔÚÄãµÄPHP³ÌÐòÖÐ×ö´óÁ¿µÄÐ޸ġ£
ÒòΪ´úÂëÓëÊý¾Ý¿â½á¹¹ÔÚ¿ª·¢¹ý³Ì¾³£±ä¸ü£¬ÉõÖÁÔÚ²¿ÊðºóÒ²»á·¢Éú¡£½«´úÂëÓëÆäÊý¾Ý¿â¾¡¿ÉÄܵķÖÀ룬¸ô¾ø¶þÕß¼äµÄÏ໥ÒÀÀµÐÔ²¢¼õÉÙÒòijһ·½µÄ±ä»¯¶ø²úÉúµÄÐ޸Ť×÷ÊǷdz£ÓÐÒæµÄ¡£
ÎÊÌâ
ÄãÔõÑù²ÅÄܽ«ÄãµÄÓ¦ÓÃÀàÓëËùÊôµÄÊý¾Ý¿âÖ®¼äµÄ½áºÏ¶È½µÖÁ×îµÍ£¿ÀýÈ磬µ±ÄãµÄÊý¾Ý±í×Ö¶ÎÃû·¢Éú±ä»¯Ê±£¬ÄãÔõÑù½«Óë´ËÏà¹ØµÄÐ޸Ť×÷½µÖÁ×îµÍ£¿
½â¾ö·½°¸
Êý¾ÝÓ³Éäģʽ½«¶ÔÏóµÄÊôÐÔÓë´æ´¢ËüÃǵıí×ֶμäµÄ½áºÏÃܶȽµµÍ¡£Êý¾ÝÓ³ÉäģʽµÄ±¾ÖʾÍÊÇÒ»¸öÀ࣬ËüÓ³Éä»òÊÇ·ÒëÀàµÄÊôÐÔ»òÊÇ·½·¨µ½Êý¾Ý¿âµÄÏàÓ¦×ֶΣ¬·´Ö®ÒàÈ»¡£Êý¾ÝÓ³ÉäµÄ×÷Ó㨹¤×÷£©¾ÍÔÚÓÚÄܶÔË«·½Ëù³ÊÏÖ³öµÄÐÅÏ¢µÄÀí½â£¬²¢ÄܶÔÐÅÏ¢µÄ´æÈ¡½øÐпØÖÆ£¬Èç¸ù¾Ý´æ´¢ÔÚÊý¾Ý±íÖеÄÐÅÏ¢ÖØ½¨ÐµÄÓò¶ÔÏ󣬻òÊÇÓÃÓò¶ÔÏóµÄÐÅÏ¢À´¸üлòɾ³ýÊý¾Ý±íÖеÄÏà¹ØÊý¾Ý¡£
¶ÔÓÚÃæÏò¶ÔÏó´úÂëÓëÊý¾Ý¿â±íºÍ×ֶμäµÄÓ³Éä¹ØÏµµÄ´æ´¢ÓжàÖÖʵÏÖ·½Ê½¡£ÆäÖÐÒ»ÖÖ¿ÉÄܵķ½·¨¾Íͨ¹ýÊÖ¹¤±àÂ뽫ÕâÖÖÓ³Éä¹ØÏµ´æ´¢ÔÚÊý¾ÝÓ³ÉäÀàÖС£ÁíÒ»ÖÖ¿ÉÑ¡µÄ·½·¨ÊÇÓÃPHPµÄÊý×é²¢½«Æä±àÂëΪÀà±¾Éí¡£Õâ¸öÀàÒ²ÄÜÍâÔ´»ñÈ¡Êý¾Ý£¬ÈçINI»òÊÇXMLÎļþ¡£
ÏÂͼչʾÁËÒ»¸öÊý¾ÝÓ³ÉäÀàͼ£¬¸ÃÀàÓ¦ÓÃÓÚ½â¾ö´æ´¢URLÊéÇ©£¨ÔÚǰÁ½ÕÂÀïÒÑÓ¦Óõ½£©ÕâÀàÎÊÌâÓò¡£ÔÚͼÖУ¬Bookmark¶ÔÏóÊÇÓò¶ÔÏó£¬BookmarkMapperÊÇÊý¾ÝÓ³ÉäģʽµÄÒ»¸öʵÏÖ£¨Ö´ÐУ©¡£BookmarkÓ¦¸Ã°üº¬ÒµÎñÂß¼ÈçУÑéURLs¡£BookmarkMapperÔòÍêÈ«ÊÇÒ»¸öÔÚBookmarkµÄgetterÓësetter·½·¨Óëbookmark±í×ֶνṹ¼äµÄ½»²æ²ÎÕÕÎï¡£
ÕâÁ½¸öΪ¹ØÏµºÜÃÜÇУºBookmarkMapper³äµ±ÁËÒ»¸ö¹¤³§£¬À´ÊµÀý»¯Bookmark£¬²¢ÇÒ½ÓÊÜ
BookmarkÀàµÄʵÀý×÷ΪºÜ¶àBookmarkMapper²Ù×÷µÄ²ÎÊý¡£
Ñù±¾´úÂë
ÓÃUMLʾͼ×÷Ϊ·±ê£¬ÈÃÎÒÃÇÀ´ÊµÏÖBookmarkÓëBookmarkMapperÀà¡£
Ê×ÏÈ£¬ÕýÈçÉÏÃæËùÌá¼°£¬ÐèҪijÖÖÅäÖÃÎļþÀ´´¦Àí±í×Ö¶ÎÓë¶ÔÏó·½·¨¼äµÄÓ³Éä¡£ÔÚ±¾ÀýÖУ¬ÎÒÃÇÓÃXML×÷ΪÅäÖÃÎļþ¡£
Õâ¸öÅäÖõÄÖ÷ҪĿµÄÊÇÁÐʾBookmark±íµÄ×ֶΣ¬²¢Ö¸¶¨Äĸö·½·¨ÓÃÓÚ´ÓBookmark¶ÔÏóÖд洢Óë»ñÈ¡¸÷×ÔµÄÐÅÏ¢¡£Ò»¸ö·Ç³£¼òµ¥µÄXML½á¹¹¾Í×ã¹»ÁË£¬ÓÉÒ»¸ö<bookmark>¸ùÔªËØÓëһϵÁеÄ<field>ÔªËØ¹¹³É£¬ÈçÏÂËùʾ
| <field> <name>url</name> <accessor>getUrl</accessor> <mutator>setUrl</mutator> </field> |
<name>ÔªËØ´æ´¢Êµ¼ÊµÄÎïÀí×Ö¶ÎÃû¡£<accessor>ÔªËØ´æ´¢ÁË»ñÈ¡ÊôÐÔÊý¾Ý·½·¨µÄÃû³Æ£¬ËüÊÇ¿ÉÑ¡ÏÒòΪһЩ×Ö¶ÎÈçʱ¼ä´ÁÊDz»ÐèÒªÓ³ÉäµÄ¡£<mutaror>Ôò´æ´¢ÁËBookmarkÀàÖÐÍê³ÉÌî³ä¶ÔÏóÖµµÄ·½·¨Ãû¡£ÁíһЩÐÅÏ¢Ò²ÄÜÌí¼Óµ½Õâ¸öÓ³Éä±íÖУ¬ÀýÈ磬ÄãÄÜÉùÃ÷ÿ¸ö×ֶεÄthetype ºÍsizeÔªËØ£¬ÕâʹµÃÄãÄÜÓÃÕâЩÐÅÏ¢¶¯Ì¬µÄÉú³ÉSQLÀ´½¨Á¢Êý¾Ý±í¡£Èç¹ûÄãµÄÓ¦ÓÃÓÐÒ»¸öÓÃPHPдµÄ°²×°°ü£¬ÔòÄã»á¶Ô´ËÌØ±ð¸ÐÐËȤ£¬ÕâÑùÄã¾Í¿ÉÒÔͨ¹ýÕâ¸öÓ³Éä±íÀ´½¨Á¢±í½á¹¹¡£µ±É趨»ùÓÚÒÔÉÏÐÅÏ¢µÄPHP¶ÔÏóÊôÐÔʱ£¬ÄãÒ²ÄÜ×Ô¶¯µÄÉ趨ÆäÊý¾ÝÖµ¡££©
ÍêÕûµÄXMLÎļþÈçÏ£º
|
<bookmark> |
|
object(SimpleXMLElement)#21 (1) { |
ÕâÓÖµ¼ÖÂʵÏÖData MapperÁíÒ»¸öÖØÒªµÄÒªÇó£ºÒòΪData Mappe¶ÔÓò¶ÔÏó͸Ã÷£¬ËùÓÐÏà¹ØµÄ¶ÔÏó¶¼±ØÐë¶ÔËùÓÐÏà¹ØµÄÊôÐÔÌṩijÖÖ¹«¹²µÄͨµÀ£¬ÕâÑùData MapperÔÚ½¨Á¢Ê±²ÅÄÜÕýÈ·³õʼ»¯Óò¶ÔÏ󣬲¢ÔÚ±£´æÓò¶ÔÏóʱ¿É¶ÁÈ¡ÆäÊôÐÔÖµ¡£
BookmarkµÄÊôÐÔ¶¼ÊDZ£»¤Ð͵쬵«¸øÃ¿¸öÊôÐÔÌṩÁËgetterºÍsetter·½·¨£¬Òò´ËÕâÕýºÃÄÜÂú×ãÐèÇó¡£
ÈÃÎÒÃÇ´ÓÉèÖÃÓë»ñÈ¡BookmarkÀàµÄ’url’ÊôÐԵĴúÂ뿪ʼ¡£
| class Bookmark { protected $url; // ... public function getUrl() { return $this->url; } public function setUrl($url) { $this->url=$url; } } |
ÄãÄÜͨ¹ý·´Éä»úÖÆÀ´±ÜÃâµÄµ¥µ÷µÄ±àдÎÞÊý¼òµ¥µÄgetterºÍsetter·½·¨¡£Í¨¹ý¶Ô¶ÔÏó×ÔÉíµÄ“¿ú̽”£¬ÄãÄÜʹ¶ÔÏó²âÊÔij¸öÌØ¶¨µÄÊôÐÔÊÇ·ñ¾ßÓÐgettersºÍsettersÒÔ¼°ÊÇ·ñÕâÑùÃüÃûµÄ¡£
ÈÃÎÒÃÇÀ´Ò»Ð©²âÊÔ¡£
| class BookmarkTestCase extends BaseTestCase { //... function testAccessorsAndMutators() { $bookmark=new Bookmark(false); $props=array(‘Url’, ‘Name’, ‘Desc’, ‘Group’, ‘CrtTime’, ‘ModTime’); foreach($props as $prop) { $getprop=“get$prop”; $setprop=“set$prop”; $this->assertNull($bookmark->$getprop()); $val1=‘some_val’; $bookmark->$setprop($val1); $this->assertEqual($val1, $bookmark->$getprop()); $val2=‘other_val’; $bookmark->$setprop($val2); $this->assertNotEqual($val1, $bookmark->$getprop()); $this->assertEqual($val2, $bookmark->$getprop()); } } } |
¶Ôÿһ¸öÊéÇ©µÄÊôÐÔ£¬²âÊÔ¶¼Í¨¹ýmutaror·½·¨É趨ÁËÒ»¸öÖµ£¬²¢Óëͨ¹ýaccessor·½·¨·µ»ØµÄÖµ½øÐÐУÑé¡£ÖµÔٴα»¸Ä±ä²¢Ð£Ñé¡£
Õâ¶Î´úÂë´úÂë»ùÓÚ³£Àý¶ø²»ÊÇijÖÖÖ±½ÓµÄÓ³Éä¡£»ñÈ¡Óë±ä¸ü·½·¨µÄÃû³ÆÓÉgetÓëset¿ªÍ·£¬²¢ÓÉÊôÐÔÃû×é³É£¨Ð¡Ð´£©¡£ÀýÈ磬»ñÈ¡’url’·½·¨µÄÃû³ÆÎªgetUrl£¨£©£¬ÐÞ¸Äurl·½·¨µÄÃû³ÆÔòΪsetUrl()¡£
ÕâÀïÊÇʵÏÖ¶¯Ì¬»ñÈ¡ÓëÐ޸ķ½·¨µÄһЩ´úÂëʾÀý¡£
|
class Bookmark { |
Òª´ïµ½¶¯Ì¬Éú³Égetter ºÍsetter·½·¨£¬Ôò·½·¨Ãû±»·ÖÎö£¬¿´ÊÇ·ñÊÇÒÔ’get’»òÊÇ’set’¿ªÍ·£¬²¢ÇÒÊÇ·ñÒÔÒ»¸öÕýÈ·µÄ¶ÔÏóÊôÐÔÃû½áÊø¡£Èç¹ûÊÇÕâÑù£¬ÊôÐÔÖµ¾ÍÄÜÕýÈ·µÄÐÞ¸ÄÓë·µ»Ø¡£Õâ¸ö¶¯Ì¬·½·¨¾Í¿ÉÒÔ´úÌæÊÖ¹¤ÊµÏÖµÄgeturl()Óëgeturl()·½·¨ÁË£¬ÕâÑù£¬ÕâЩÊÖ¹¤´úÂë¾Í¿ÉÒÔɾ³ýÁË¡£
Õâ¶ùÓÐÒ»¸ö¸±×÷ÓÃҪעÒ⣬Èç¹ûÓñ¾´úÂëµ÷ÓÃÁ˱ðµÄ·½·¨£¬Ôò²»»áÓдíÎóÐÅÏ¢¸ø³ö¡£ÎªÁË·ÀÖ¹ÕâÖÖÇé¿ö£¬ÈÃÎÒÃǶԴíÎóµÄµ÷ÓÃÅ׳öÒ»¸öÀýÍâ³öÀí¡£
|
class Bookmark { |
|
class BookmarkTestCase extends BaseTestCase { |
Õâ¶ù»¹ÓÐÁíÒ»¸öҪעÒâµÄÊÂÏһµ«µ±$idÊôÐÔÉèÖúúó¾Í²»Äܱ䶯Ëü£¬ÈÃÎÒÃǽ¨Á¢Ò»¸öÊÔÑéÀ´ËµÃ÷ÉÏÊöÊÂÏî¡£µ÷ÓÃÒ»´ÎSetId()À´ÉèÖÃIDÖµºó£¬¾Í¿ÉÒÔÓÃgetid()·´¸´»ñÈ¡ÆäÖµ£¬µ«ËæºóÔٴε÷ÓÃsetid()¾ÍÓ¦¸ÃÎÞЧ¡£
| class BookmarkTestCase extends BaseTestCase { //... function testUnsetIdIsNull() { $bookmark=new Bookmark; $this->assertNull($bookmark->getId()); } function testIdOnlySetOnce() { $bookmark=new Bookmark; $id=10; //just a random value we picked $bookmark->setId($id); $this->assertEqual($id, $bookmark->getId()); $another_id=20; // another random value, !=$id //state the obvious $this->assertNotEqual($id, $another_id); $bookmark->setId($another_id); // still the old id $this->assertEqual($id, $bookmark->getId()); } } |
Ó¦¼Çסһ¸ö·Ç³£ÖØÒªµÄ¹æÔò£ºÔÚÀàÖÐÏÔʾ¶¨ÒåµÄ·½·¨½«»áÖØÔØÓÉ_call()Ö´ÐеÄͬÃû·½·¨¡£Äã¿ÉÒÔרÃŶ¨ÒåÒ»¸öͬÃûµ«ÐÐΪ¹¦Äܲ»Ò»ÑùµÄ·½·¨£¬Èçsetid()À´ÖØÔØÈκνèÖú__call()À´Ö´ÐеÄͬÃû·½·¨¡£
| class Bookmark { protected $id; //... public function setId($id) { if (!$this->id) { $this->id=$id; } } } |
µ½Ä¿Ç°ÎªÖ¹£¬ ÎÒÃÇÖ»ÊÇÓÐÁË»ù±¾Êý¾Ý¶ÔÏó£¬ÈÃÎÒÃÇÔö¼ÓһЩҵÎñÂß¼µ½ÀïÃæ£¬±Ï¾¹£¬Ó¦ÓÃÊý¾ÝÓ³ÉäģʽµÄÔÒòÖ®Ò»¾ÍÊÇÔÚÓÚ½«ÒµÎñÂß¼ÓëÊý¾Ý´æÈ¡·ÖÀ롣ΪÓëÉè¼ÆÔÔò±£³ÖÒ»Ö£¨¸æÖª£¬¶ø²»ÊÇÌáÎÊ£©£¬Ôö¼ÓÒ»¸öfetch()·½·¨À´»ñµÃʵ¼ÊµÄ£¨html£©ÊéÇ©ÄÚÈݵÄÒ³Ãæ¡£
ÒÔÏ´úÂë²âÊÔÁËÕâÖÖÄÜÁ¦
|
class BookmarkTestCase extends BaseTestCase { |
|
class Bookmark { |
Ê×ÏÈ£¬ÎÒÃÇΪÁËʵÏÖBookmarkMapper£¬ÐèÒªÔö¼ÓеÄÊý¾Ý¿â¼Ç¼¡£
ÔÚÊý¾ÝÓ³ÉäģʽÀïÃæ£¬Óò¶ÔÏóÊǶÔÊý¾ÝÓ³ÉäÊÇ͸Ã÷µÄ£¬µ«ÊÇËü°üº¬ÁËËùÓеÄÉÌÒµÂß¼ºÍ´´½¨¶ÔÏóDZÔڵĹæÔò¡£ÆäÖÐÒ»¸ö´´½¨Êý¾Ý¼Ç¼¹æÔò¾ÍÊÇ´´½¨Ò»¸öеÄBookmark¶ÔÏóʵÀý£¬ÉèÖÃÊôÐÔ£¬»¹ÓÐÈÃBookmarkMapperÀ´±£´æÐ´´½¨µÄ¶ÔÏóʵÀý¡£ºÃ£¬ÏÖÔÚÎÒÃÇÀ´¿´ÏÂÈçºÎʵÏÖÕâ¸ö½Ó¿Ú¡£
BookmarkMapper ±ØÐëÄܹ»ÓëÊý¾Ý¿â½øÐн»»¥¡£¾ÍÏñÔÚÇ°ÃæÁ½¸öÕ½ÚÖÐËù˵µÄÒ»Ñù£¬ÎÒÃÇʹÓÃ
ADOdb À´·ÃÎÊÊý¾Ý¿â¡£´ËÍ⣬ÔÚ¹¹ÔìBookmarkMapperµÄʱºò£¬°ÑADOdbµÄÁ¬½Ó´«µÝ¹ýÈ¥¡£
| //´úÂë class BookmarkMapper { protected $conn; public function __construct($conn) { $this->conn=$conn; } } |
BookmarkMapper »¹±ØÐëµ¼Èë¸Õ²ÅÌáµ½µÄXML Îļþ¡£ÎªÁËÈÃXML¸ü·½±ãʹÓã¬ÎÒÃǰÑÓ³Éä´æ´¢ÎªÒ»Ð©ÀàµÄÃû×Ö=> simplexml ÔªËØ¡£ÎÒÃǰÑÕâ¸ö¼ÓÔÚ¹¹Ô캯ÊýÀïÃæ£º
|
class BookmarkMapper { |
|
class BookmarkMapperTestCase extends BaseTestCase { |
ÕâÀ²âÊÔ´úÂë´´½¨ÁËÒ»¸öеÄBookmark ÀàµÄʵÀý£¬²¢ÉèÖÃÁ˸ÃÀàµÄÏà¶ÔÓ¦µÄÊôÐÔ£¬È»ºóÈÃÒ»¸öBookmarkMapper ʵÀýÀ´´æ´¢£¨save()£©Õâ¸öBookmarkʵÀý¡£ÁíÍ⣬Õâ¸ö²âÊÔ»¹²âÊÔ´æ´¢¶ÔÏó¡¢ÉèÖÃID¡¢ÍùÊý¾Ý¿â²åÈëÐеÄÓÐЧÐÔ¡£
½ÓÏÂÀ´£¬ÈÃÎÒÃÇдһЩ´úÂëÀ´Ö´ÐÐËü¡£
| class BookmarkMapper { //... const INSERT_SQL=“ insert into bookmark (url, name, description, tag, created, updated) values (?, ?, ?, ?, now(), now()) “; public function save($bookmark) { $rs=$this->conn->execute( self::INSERT_SQL ,array( $bookmark->getUrl() ,$bookmark->getName() ,$bookmark->getDesc() ,$bookmark->getGroup())); } } |
Ò»¸ö¶ÔÏóµÄ³£Á¿´æ´¢Á˲åÈëÊý¾ÝµÄÓï¾ä£¬²¢ÇÒ´úÂë“×Ô¶¯”°ÑBookmark µÄaccessor·½·¨Ó³Éäµ½Ïà¶ÔÓ¦µÄSQLÓï¾ä¡£
ÏÖÔÚ¿´ÆðÀ´¶¼ÆëÈ«ÁË£¬µ«ÊÇÎÒÃÇ»¹ÐèÒª×öÁ½¸öÊÂÇ飺´¦ÀíÊý¾Ý¿â´íÎóµÄ´úÂëºÍ¸ù¾ÝÊý¾Ý¿âµÄ¸Ä±ä¸ü¸Ä³õʼ»¯µÄʱºòÉèÖúóÕ߸ü¸Ä$bookmarkµÄÊôÐÔ¡£
| class BookmarkMapper { //... public function save($bookmark) { $rs=$this->conn->execute( self::INSERT_SQL ,array( $bookmark->getUrl() ,$bookmark->getName() ,$bookmark->getDesc() ,$bookmark->getGroup())); if ($rs) { $inserted=$this->findById($this->conn->Insert_ID()); //clean up database related fields in parameter instance $bookmark->setId($inserted->getId()); $bookmark->setCrtTime($inserted->getCrtTime()); $bookmark->setModTime($inserted->getModTime()); } else { throw new Exception(‘DB Error: ‘.$this->conn->errorMsg()); } } } |
findById() ¿´ÆðÀ´ÄÚÈÝ»¹ºÜÉÙ£¬ËüµÄ×÷ÓÃÊÇÕÒµ½²¢·µ»ØÆ¥ÅäIDµÄBookmark ʵÀý¡£±¾ÖÊÉÏÀ´Ëµ£¬ BookmarkMapper ÓÃÀ´²åÈëеÄBookmark£¬´ÓÊý¾Ý¿âÌáÈ¡Êý¾Ý£¬²¢ÇÒ¸ù¾ÝÕýÈ·µÄÖµÀ´ÉèÖúÎʱµÄÊôÐÔÖµ¡£¶øÇÒÒòΪBookmark ʵÀý×Ô¼º¾ÍÊDzÎÊý²¢¿ÉÒÔ±»¸üУ¬ËùÒÔ±ØÐëÒª·µ»ØÈκÎÖµ¡£
ÈÃÎÒÃÇÀ´¿´ÏÂfindById()µÄµÄÏêϸÄÚÈÝ¡£Äã¿ÉÒÔʹÓÃͬÑùµÄBaseTestCase£¨Ç°ÃæµÄTable Data GatewayÕ½ڣ©£º
| class BookmarkMapperTestCase extends BaseTestCase { // ... function testFindById() { $mapper=new BookmarkMapper($this->conn); $this->addSeveralBookmarks($mapper); $this->assertIsA( $bookmark=$mapper->findById(1) , ‘Bookmark’); $this->assertEqual(1, $bookmark->getId()); } } |
´Ó¼¼ÊõÉÏÀ´Ëµ£¬addSeveralBookmarks() ±ØÐëµÈ´ýfindById()¹¤×÷Õý³£ÔÙ¿ªÊ¼¹¤×÷¡££¨¿´save()·½·¨ÀïÃæµÄ´úÂë¾ÍÖªµÀÁË£©£¬ÎÒÃǵÈÏÂÔÙÀ´Ñо¿addSeveralBookmarks()¡£
|
class BookmarkMapper { |
|
createBookmarkFromRow()¡£ |
|
class BookmarkMapper { |
Ê×ÏÈ£¬Êý¾Ý´ÓÊý¾Ý¿âÌáÈ¡³öÀ´£»Ëæºó£¬½¨Á¢Ò»¸öBookmarkµÄʵÀý¡£È»ºó£¬¶ÔÓÚÓ³ÉäµÄÿһ¸ö²¿·Ö£¬´úÂëÕÒµ½ºÏÊʵÄsetter·½·¨²¢°ÑÊý¾ÝÐеÄÖµ´«µÝ¸øsetter·½·¨¡£BookmarkʵÀý£¬Ìí¼ÓÁËÊý¾Ý¿âµÄÊý¾Ýºó£¬ÓÃfindById()È¡³ö¡£
ÏÖÔÚ£¬ÈÃÎÒÃÇ¿´ÏÂBookmarkMapper::add()·½·¨£¬Í¨¹ýBaseTestCase::addSeveralBookmarks()ʵÏÖ¡£Í¨¹ýÒ»¸ö²âÊÔÓÃÀý£¬ÎÒÃÇ¿ÉÒÔ·¢ÏÖËûÃǶ¼ÊÇÔÚ±íÀïÃæ´´½¨Ò»¸öеÄÐв¢ÇÒ·µ»ØBookmarkÀàµÄÒ»¸öÓµÓÐʵ¼ÊÊý¾ÝµÄʵÀý¡£
|
class BookmarkMapperTestCase extends BaseTestCase { |
| class BookmarkMapper { // ... public function add($url, $name, $description, $group) { $bookmark=new Bookmark; $bookmark->setUrl($url); $bookmark->setName($name); $bookmark->setDesc($description); $bookmark->setGroup($group); $this->save($bookmark); return $bookmark; } } |
Õâ¸öÓ붯̬µÄ¼Ç¼ActiveRecordTestCase::add()ÊǺÜÀàËÆµÄ£¬·½±ãʹÓᣵ«ÊÇÕâÀïËüÒѾ±»¼ÓÈëµ½Êý¾ÝÓ³ÉäÀïÃæ¶ø²»ÊDzâÊÔÓÃÀý£¬ÕâÑùÔÚÕû¸öÏîÄ¿ÀïÃæ¶¼¿ÉÒÔʹÓÃËü¡£
ÄãÏÖÔÚ¿ÉÒÔ¿ªÊ¼²Ù×÷¸ü¶àµÄfinder·½·¨£¬°üÀ¨ÊÕ¼¯BookmarkʵÀýµÄ·½·¨¡£
| class BookmarkMapperTestCase extends BaseTestCase { // ... function testFindByGroup() { $mapper=new BookmarkMapper($this->conn); $this->addSeveralBookmarks($mapper); $this->assertIsA( $php_links=$mapper->findByGroup(‘php’) ,’array’); $this->assertEqual(3, count($php_links)); foreach($php_links as $link) { $this->assertIsA($link, ‘Bookmark’); } } } |
ѰÕÒÌØÊâ×éµÄbookmarks ¿ÉÒÔ²Ù×÷ÈçÏ£º
| class BookmarkMapper { // ... public function findByGroup($group) { $rs=$this->conn->execute( ‘select * from bookmark where tag like ?’ ,array($group.’%’)); if ($rs) { $ret=array(); foreach($rs->getArray() as $row) { $ret[]=$this->createBookmarkFromRow($row); } return $ret; } } } |
ADOConnection::execute()·½·¨·µ»ØµÄʱһ¸öADOResultSet ¶ÔÏó¡£ËùÒÔ·µ»ØµÄ½á¹ûÓÐÒ»¸ögetArray() ·½·¨À´½øÐд¦Àí£¬·µ»ØµÄÒ»¸öÁªºÏÊý×é (field=> value)¡£Êý×é°üº¬ÁËÿһÐеÄÊý¾Ý¡£
½Ó×Å£¬ÕâЩÊý¾ÝÐÐÐγɵÄÊý×é´«µÝ¸øcreateBookmarkFromRow()·½·¨½øÐд¦Àí²¢´´½¨BookmarkÀàµÄʵÀý¡£
Ôõô¸üÐÂÊý¾ÝÓ³ÉäÄØ?¸üеIJÙ×÷ͨÓÃÐèÒªÓõ½BookmarkºÍBookmarkMapper¡£È·±£bookmarksÓÐûÓиüÐÂ×îºÃµÄ·½·¨ÊÇʹÓÃBookmarkTestCase¡£²âÊÔÊý¾Ý¿â·ÃÎʵIJ¿·ÖÔòÓɲâÊÔBookmarkMapperµÄ´úÂ븺Ôð¡£
| class BookmarkTestCase extends BaseTestCase { // ... function testSaveUpdatesDatabase() { $mapper=new BookmarkMapper($this->conn); $this->addSeveralBookmarks($mapper); $bookmark=$mapper->findById(1); $this->assertEqual( ‘http://blog.casey-sweat.us/’ ,$bookmark->getUrl()); $bookmark->setUrl( ‘http://blog.casey-sweat.us/wp-rss2.php’); $mapper->save($bookmark); $bookmark2=$mapper->findById(1); $this->assertEqual( ‘http://blog.casey-sweat.us/wp-rss2.php’ ,$bookmark2->getUrl()); } } |
ÏÖÔÚ£¬save()·½·¨Í¨¹ýINSERT°ÑеÄbookmards²åÈëµ½Êý¾Ý¿â¡£µ«ÊÇ£¬¾ÍÏñÕâ¸ö²âÊÔÓÃÀýº¸ÇµÄÒ»Ñù£¬save()ÏÖÔÚ±ØÐëÈ·¶¨Bookmark²ÎÊýÊÇеĻòÕßÒѾÔö¼Óµ½Êý¾Ý¿âÀïÃæÁË¡£¶ÔÓÚǰÕߣ¬INSERT¾Í¿ÉÒÔ²Ù×÷ÁË£»¶ÔÓÚºóÕߣ¬¾ÍÐèÒªÓÃUPDATEÁË¡£
¾ÍĿǰµÄÇé¿ö£¬ÈÃÎÒÃÇÖØ¹¹Ï²Ù×÷INSERTÓï¾äµÄ´úÂë(Õâ¸öÔÀ´ÊǺ¸ÇÔÚsave()·½·¨ÀïÃæµÄ)£¬³ÉΪһ¸öеÄ˽Óеķ½·¨£¬ÃüÃûΪinsert()¡£
|
class BookmarkMapper { |
| class BookmarkMapper { //... public function save($bookmark) { if ($bookmark->getId()) { $this->update($bookmark); } else { $this->insert($bookmark); } } } |
ÏÖÔÚ£¬Ä㻹ÐèÒªÒ»¸öupdate() ·½·¨£¬ËüºÍinsert()·½·¨ºÜÀàËÆ¡£»ØÏëһϣ¬insert()·½·¨°´Õչ̶¨µÄģʽÀ´±àд´úÂë´ÓÊôÐÔµ½ÓòÃû½øÐÐÊý¾ÝÓ³Éä¡£ÄÇô¶ÔÓÚupdate()£¬ÈÃÎÒÃÇÓÃÒ»¸ö¸ü¼Ó¶¯Ì¬µÄ·½·¨£¬´Óbookmark.xmlÀïÃæ»ñµÃÐÅÏ¢²¢½øÐиü¸Ä¡£
|
class BookmarkMapper { |
×îºó£¬ÈÃÎÒÃÇ¿´Ï“ɾ³ý”µÄ²Ù×÷¡£ÎÒÃÇΪBookmarkMapperÀàдһ¸ö·½·¨À´½ÓÊÜÒ»¸öBookmark²¢°ÑËü´ÓÊý¾Ý¿âɾµô¡£
Ê×ÏÈ£¬Ð´Ò»¸ö²âÊÔ´úÂ룺
| class BookmarkMapperTestCase extends BaseTestCase { // ... function testDelete() { $mapper=new BookmarkMapper($this->conn); $this->addSeveralBookmarks($mapper); $this->assertEqual(5, $this->countBookmarks()); $delete_me=$mapper->findById(3); $mapper->delete($delete_me); $this->assertEqual(4, $this->countBookmarks()); } function countBookmarks() { return $this->conn->getOne( ‘select count(1) from bookmark’); } } |
´úÂë±¾Éí£º
| class BookmarkMapper { // ... public function delete($bookmark) { $this->conn->execute( ‘delete from bookmark where id=?’ ,array((int)$bookmark->getId())); } } |
ÏÖÔÚ£¬Äã¿ÉÒÔͨ¹ýÊý¾ÝÓ³ÉäģʽÀ´ÍêÕûµÚ½øÐвÙ×÷ÁË¡£
Èç¹ûÄãµÄÓò¶ÔÏó´´½¨ÆðÀ´±È½Ï·±Ëö£¬Äã¿ÉÄÜÐèҪдһ¸öBookmarkMapper::deleteById()·½·¨£¬Ëü²»ÐèÒª¼ÓÔØÓò¶ÔÏó¾ÍÄÜɾ³ýÊý¾Ý¡£
×ܽá
ºÜÃ÷ÏÔ£¬ÔÚÊý¾Ý¿âºÍÓò¶ÔÏóÖ®¼äÔö¼ÓÒ»¸öת»»²ã»áÔì³ÉÒ»¶¨µÄ¸´ÔÓÐÔ¡£µ«ÊÇ£¬Õâ¸ö¸´ÔÓÐÔ¿ÉÒÔ¸øÄãµÄ´úÂë´øÀ´¾Þ´óµÄÁé»îÐÔ£¬ÒòΪÄã¿ÉÒÔ²»¹ÜÊý¾Ý¿âµÄ±í½á¹¹×ÔÓɵØÉý¼¶ÄãµÄÀà¡£
ÁíÍ⣬Ä㻹ÐèÒª¼ÇסµÄÊÇËùÓÐÕâЩÀý×Ó»¹Ö»ÊÇÒ»¸ö·Ç³£¼òµ¥µÄת»»»úÖÆ¡£Èç¹ûÄãÐèÒª¶ÔÕâ¸ö¼òµ¥µÄ»úÖÆ½øÐÐÉý¼¶£¬Äã¿ÉÒԲο¼holy grail of ORM—ObjectRelational Mapping—ÄÇÀïÃæ»á½øÐÐÏêϸµÄ²ûÊö¡£
ÒÔÉÏËù·ÖÏíµÄÊǹØÓÚ¡¶PHPÉè¼ÆÄ£Ê½½éÉÜ¡·µÚÊ®ÁùÕ Êý¾ÝÓ³Éäģʽ£¬ÏÂÃæÊDZà¼ÎªÄãÍÆ¼öµÄÓмÛÖµµÄÓû§»¥¶¯£º
¡¡¡¡Ïà¹ØÎÊÌ⣺½éÉܼ¸¸öÄã±È½ÏÊìϤµÄÉè¼ÆÄ£Ê½,²¢¼òµ¥½éÉÜËüÃÇÊÇÈç...
¡¡¡¡´ð£ºÈçºÎ×öºÃ¼ô¼ÄØ£¿Ôڴ˱ÊÕß̸̸×Ô¼ºµÄ¹Ûµã£º¼ô¼¾ÍÊǽ«²»·ûºÏÖ÷ÌâµÄ²¿·Öɾ³ý²¢ÕâÀﻹ½éÉܼ¸¸ö¹ý¶ÉЧ¹ûµÄ²é¿´¼¼ÇÉ£ºÔÚTransitionsÃæ°åµÄ´°¿Ú¿ØÖƲ˵¥ÖУ¬Ñ¡Ôñ >>Ïêϸ
¡¡¡¡Ïà¹ØÎÊÌ⣺PHPģʽ¡¢Ó³Éä
¡¡¡¡´ð£ºÊý¾ÝÓ³ÉäģʽʹÄúÄܸüºÃµÄ×éÖ¯ÄãµÄÓ¦ÓóÌÐòÓëÊý¾Ý¿â½øÐн»»¥¡£ Êý¾ÝÓ³Éäģʽ½«¶ÔÏóµÄÊôÐÔÓë´æ´¢ËüÃǵıí×ֶμäµÄ½áºÏÃܶȽµµÍ¡£Êý¾ÝÓ³ÉäģʽµÄ±¾ÖʾÍÊÇÒ»¸öÀ࣬ËüÓ³Éä»òÊÇ·ÒëÀàµÄÊôÐÔ»òÊÇ·½·¨µ½Êý¾Ý¿âµÄÏàÓ¦×ֶΣ¬·´Ö®ÒàÈ»¡£ Êý¾ÝÓ³ÉäµÄ×÷Óã¨... >>Ïêϸ
¡¡¡¡Ïà¹ØÎÊÌ⣺ÎÒÒ»¿ªÊ¼¾ÍÏëÍùÉè¼ÆÄ£Ê½¼Ü¹¹ÉÏ×ߣ¬
¡¡¡¡´ð£ºÏëÕâ´Î²Î¼Óµç×ÓÉè¼Æ´óÈüÍêºó£¬½øÈëǶÈëʽѧϰ£¡ÎÒÒ»Ö±¶¼ÓÐѧϰlinux²Ù×÷ϵͳ£¬2¡¢Ç§Íò±ðÖ½ÉÏ̸±ø£¬Êé±¾µÄѧϰÀëʵ¼Ê¹¤×÷µÄÊìÁ·²Ù×÷»¹Óкܳ¤Ò»¶Î¾àÀ룬ϣÍû >>Ïêϸ
- ÆÀÂÛÁÐ±í£¨ÍøÓÑÆÀÂÛ½ö¹©ÍøÓѱí´ï¸öÈË¿´·¨£¬²¢²»±íÃ÷±¾Õ¾Í¬ÒâÆä¹Ûµã»ò֤ʵÆäÃèÊö£©
-
