我正在爲我的應用程序開發api層。我設計了一個結構,需要一些建議/反饋。你可以在底部找到結構的基本實現。開發一個API層。需要關於Decorator模式使用的一些建議和反饋
這裏是我的結構要求:(JSON,XML等)
- 從API命令的響應可能需要以不同的格式進行格式化
- 一些API命令可能需要進行身份驗證,有的可能不
- 每個API命令應該是開放的,以通過插件擴展(通知關於事件,輸入/輸出paramters的濾波等)
考慮到這些要求我已將Decorator模式應用於我的API層。我不確定我是否設計了正確的結構,需要確定。
需求列表中的最後一項未在下面的實現中討論,因爲我仍在試圖找出如何做到這一點。
您認爲如何?我在正確的道路上嗎?
<?php
// Interfaces
interface I_API_Command {}
// Abstract classes
abstract class A_API_Command implements I_API_Command
{
abstract public function run();
}
abstract class A_Decorator_API_Command implements I_API_Command
{
protected $_apiCommand;
public function __construct(I_API_Command $apiCommand) {
$this->_apiCommand = $apiCommand;
}
abstract public function run();
}
// Api command class
class APIC_Tasks_Get extends A_API_Command
{
public function run() {
// Returns tasks
}
}
// Api command decorator classes
class APICD_Auth extends A_Decorator_API_Command
{
public function run() {
// Check authentication
// If not authenticated: return error
// If authenticated:
return $this->_apiCommand->run()
}
}
class APICD_JSON_Formatter extends A_Decorator_API_Command
{
public function run() {
return json_encode($this->_apiCommand->run());
}
}
// Usage
$apiCommand = new APICD_JSON_Formatter(new APICD_Auth(new APIC_Tasks_Get()));
$apiCommand->run();
?>
現在我在想,也許我應該實施戰略模式,而不是裝飾模式。因爲我想選擇不同的輸出格式策略,所以不要將輸出格式策略層疊在一起。也許戰略模式輸出格式和裝飾模式認證。天啊!? – matte 2010-10-15 10:31:45