由開放的面向服務架構聯合組織(OSOA)發起的,面向組件的架構(SCA)和服務資料對象(SDO)已經成為了開發面向服務的架構的最新方法。開始時這些開發只是集中在一些通用的開發環境中,如Java和C++,目前SCA和SDO已經開始進入到其他一些平台,在這裡我們將講解如何在PHP上包含一些SOA技術。
首先我們看看SDO能提供給你什麼。在一個典型的PHP應用中,資料一半來自關聯式資料庫,但是如果這個應用程式後來不僅僅只是從這兒擷取資料,而是從一個普通文字檔或者Web服務中擷取資料呢?這個問題很複雜,因為每種資料來源都會要求有自己的擷取方式。
在這種情況下,PHP中SDO提供了一種處理資料來源的透明方式。它不是單獨的處理每種資料來源,而是提供了一種統一的訪問資料對象的方式。這種過程是通過資料訪問服務(DAS)來完成的,它是SDO架構上的一種中介方式。讓我們看看一個PHP中的SDO請求。
<?php $providers = $company->shippingByGround; foreach ($providers as $name => $value) { echo "$name: $valuen"; } ?> |
注意最後的請求是如何處理未知的資料來源的,你不知道這裡資料是從哪裡提取來的,只是使用了PHP的SDO格式來做一個尋找,而細節是由DAS完成的,PHP目前能夠支援擷取XML和關聯式資料庫的資料來源。
SDO關心的是資料,而SCA使用了更加通用的類和組件來完成同樣的透明方式。從任何PHP類中訪問已有的商務邏輯需要強制開發人員來圍繞一類特定的假設來做設計嗎?邏輯是否已在另外一個本地PHP類中?是否在網路中存在了?是使用PHP編寫的嗎?
當以上提到的情境在各自的要求中是可滿足的話,那麼每個都需要使用不同的方法處理。
使用SCA方式,邏輯在哪裡存放就無關緊要了,更不要提使用何種語言來實現。那你一定會說:“這不是和一個普通的Web Service差不多嗎?沒什麼不同啊!”那麼我們舉個例子來看看PHP SCA組件裡包含了什麼。
<?php include "SCA/SCA.php"; /** * Calculate a shipment price for a given customer using a specific provider * * @service */ class ShipmentQuote { /** * The customer discount fee service to use. * * @reference * @binding.php ../DiscountFeeRate/DiscountFeeRate.php */ public $discountFee; /** * The shipping service to use. * * @reference * @binding.wsdl ../Shipper/ShipperQuote.wsdl */ public $shipper; /** * Get a quote for a given customer using a specific provider * * @param string $shipping The shipping company * @param string $customer The customer requiring shipment, in order to obtain discount rate * @return float The quote for a given customer using a certain shipping provider. */ function getQuote($shippingCo, $customer) { $rateShip = $this->shipper->getShippingPrice($shippingCo); $rate = $this->discountFee->getDiscountRate($customer); return $rate * $rateShip; } } ?>
|
上文中最關鍵的就是包含@的語句部分,它們每個都提供了一種特定的SCA行為。最上層的@service標識,表示暴露一個類作為服務。在這個例子裡,最後的getQuote函數將會是服務暴露的唯一操作,通過使用@param和@return標識。
這個最後的服務的執行或者部署——將會被委託為一個PHP SCA運行時——將會將我們帶入一個建立WSDL合約的訪問點,就像你可以在網路服務中看到的那樣。除了這種部署服務的方式的簡單性以外,SCA模型的真實優勢將會在你檢查getQuote代碼時越發體現的明顯。
注意到兩個語句$this-<shipper->getShippingPrice($shippingCo)和$this->discountFee->getDiscountRate($customer),它們是基於類中前面的應用。每個應用被其支撐服務鎖支援(由@reference和@binding標識來具體操作)在$discountFee用例中,這將是一個PHP類,而在shipper的用例中,這將是一個標準的WSDL基礎的服務。
儘管PHP的簡單和大量使用者群體的支援使得它成為構建web應用的一個好的選擇,但是它在公司專屬應用程式的很多情境中能力有限,現在通過增加SCA和SDO,提供了對PHP和以往技術的強力支援,它也和其他主流語言一樣,可以參與到面向服務的潮流中了。
【相關文章】
http://www.bkjia.com/PHPjc/446774.htmlwww.bkjia.comtruehttp://www.bkjia.com/PHPjc/446774.htmlTechArticle由開放的面向服務架構聯合組織(OSOA)發起的,面向組件的架構(SCA)和服務資料對象(SDO)已經成為了開發面向服務的架構的最新方法。開始時這...