通常應用程式可以分為如下幾個層次:
1.前端檢視
2.命令控制
3.業務邏輯
4.資料處理
前端檢視負責顯示對使用者資料和收集使用者輸入資料,提交給命令控制層次。命令控制層收到資料進行一系列加工,委託業務邏輯層完成具體的任務。業務邏輯層呼叫資料處理模組完成使用者資料的儲存。
但是前端提交的資料如何在幾個層次直接恰當的傳遞呢?一種是通過前面命令模式提供的乙個上下文(context)類來傳遞,把引數放置在context物件裡面,從命令控制層傳遞到業務邏輯層,完成一系列操作後,通過context返回操作結果。第二種方式是修改命令物件的介面,來適配對應的資料傳遞。這兩種方式有時候會破壞封裝。我們知道單例模式提供了另外一種訪問全域性變數的方式。靜態變數區域性隱藏並通過介面可以輕鬆的設定獲取物件屬性。註冊模式(registry)正是利用了這種便利。
這裡也可以把註冊模式看成單例版本的context物件。
乙個簡單的registry實現:
[php]view plain
copy
abstract
class
registry
php支援三種型別的物件資料生命週期:一種是從接收到一次http請求開始,請求處理完畢結束。另外一種是支援會話(session)級別的物件,即可以把物件資料儲存在session中,php在
session_start的時候根據cookies裡面儲存的會話id恢復不同的物件資料,可以達到同一使用者多次請求訪問同一物件資料的目的。還有一種是應用程式作用域級別的。即同一應用程式的
不同使用者可以共享同一物件資料,這個操作需要php內建的序列化函式來完成。
基於一次http請求的資料註冊模式:
[php]view plain
copy
class
requestregistry
extends
registry
static
public
function
instance()
return
self::
$instance
; }
protected
function
get(
$key
) return
null;
} protected
function
set(
$key
, $value
) static
function
set_request(request
$request
) static
function
get_request()
}
會話請求的登錄檔:
[php]view plain
copy
class
sessionregistry
extends
registry
static
function
instance()
return
self::
$instance
; }
protected
function
get(
$key
) return
null;
} protected
function
set(
$key
, $value
) public
function
set_complex(complex
$complex
) public
function
get_complex()
}
支援應用程式級別的登錄檔:
[php]view plain
copy
class
extends
registry
static
function
instance()
return
self::
$instance
; }
protected
function
set(
$key
, $value
) protected
function
get(
$key
) if
($mtime
>
$this
->mtimes[
$key
])
if(isset(
$this
->values[
$key
]))
} return
null;
} static
function
get_dsn()
static
function
set_dsn(
$dsn
) }
the end.
登錄檔模式
登錄檔的作用是提供系統級別的物件訪問功能,雖然全域性變數不怎麼好,但全域性性的資料范文仍然吸引力.許多企業級的系統都分為幾個層次,每個層次通過定義好的介面進行交流。層的分離使應用程式變得靈活,但是,當你需要在乙個層中獲得另乙個不相鄰層中的資訊時就會遇到困難。可以使用登錄檔模式來解決問題。privat...
windows登錄檔 登錄檔的認識
登錄檔的特點 1.登錄檔允許對硬體 系統引數 應用程式和裝置驅動程式進行跟蹤配置,這使得修改某些設定後不用重新啟動成為可能。2.登錄檔中登入的硬體部分資料可以支援高版本的即插即用特性。當windows檢測到機器上的新裝置時,就把有關資料儲存到登錄檔中,另外,還可以避免新裝置與原有裝置之間的資源衝突。...
監視登錄檔,,列舉登錄檔項
建立登錄檔項 lret regopenkeyex hkey current user,t software hrjd ascpatch 0,key all access,hkey if lret error success waifainfo info lret regsetvalueex hkey...