PHP聚合耦合???
這是一個通用模型接口:
PHP code
<!--
Code highlighting produced by Actipro CodeHighlighter (freeware)
http://www.CodeHighlighter.com/
-->interface API{
public function main();
public function params($value);
}
登錄后復制
然后,一般模型類繼承它:
PHP code
<!--
Code highlighting produced by Actipro CodeHighlighter (freeware)
http://www.CodeHighlighter.com/
-->class test implements API {
public function main(){
echo 'hello world!';
}
public function params($value){
var_dump($value);
}
}
登錄后復制
前端控制器,解析了URL后實例化模型類,調(diào)用接口,傳遞模型數(shù)據(jù):
PHP code
<!--
Code highlighting produced by Actipro CodeHighlighter (freeware)
http://www.CodeHighlighter.com/
-->class Control{
private function __construct(){
self::Router();
$obj = new self::$Model();
self::_Interface($obj);
}
public static _Interface(API $obj){
$obj -> main();
$obj -> params();
}
}
登錄后復制
這是我做的簡單的耦合結構,但是,這只是相對于控制器和模型類之間的耦合,而且是通用類,如果是特殊類還得使用特殊的接口和控制器,但問題不在這,問題在于我想讓模型之間也通過接口交互(數(shù)據(jù)耦合?),但是想了很多也沒有實際的解決辦法,該怎樣做這個接口呢???
比如,我需要調(diào)用一個數(shù)據(jù)庫類的函數(shù),一般情況下是直接調(diào)用:
? $db = db::main();
? #db -> Query(***********************);
但是,這不符合低耦合概念,我只要一改Query();方法就完蛋了,有什么辦法能拉取數(shù)據(jù)??
或者說,給個數(shù)據(jù)耦合的實例也行,自己慢慢研究算了....
謝謝啦!
(注:我知道,可能會有人說上面的代碼不過完善什么的?的確,我是把前端控制器的一些東西都集成起來了,但這不是我今天討論的焦點,如果給大家?guī)砹艘曈X上的不便,請見諒)
------解決方案--------------------
說是實話非常不明白你到底要做什么。。。
但是數(shù)據(jù)層要交互的話,明顯應該通過控制層來做,否則要控制層做什么?因為只有控制層知道數(shù)據(jù)之間有什么具體業(yè)務邏輯上的關系,而model僅僅應該關心的是自己的一畝三分地,超出這個范圍之外的都應該交給上層處理,這樣才是降低了耦合!
另外提到的$db->query的問題,明顯可以通過抽離字段、條件、排序等,將query轉(zhuǎn)換成
$db->select()->where()->order()->limit()
下面有2種方式:
1 然后接著抽象
$db::fetch($where, $order, $limit) {
?return $db->select('*')->where($where)->order()->limit();
}
調(diào)用的時候
$db = db::main();
$db->fetch($where, $order, $limit);
2 或者可以封裝一個底層的model基類
basemodel::fetch($where, $order, $limit) {
$db = db::main();
?return $db->select('*')->where($where)->order()->limit();
}
模型基礎
class test extends basemodel implements API {?
function dothing(){
parent::fetch($where, $order, $limit);
}
}
沒有明白這個和數(shù)據(jù)耦合有什么關系,這僅僅是調(diào)用db的封裝!
------解決方案--------------------2樓得說的有理,我個人認為降低耦合的辦法就是顯示層只負責顯示,邏輯處理就交個業(yè)務邏輯層,數(shù)據(jù)訪問層只管處理數(shù)據(jù),個做個的事!
關于數(shù)據(jù)庫類得問題,我建議你去看看uchome的數(shù)據(jù)庫類,我覺得他的類寫得還不錯,跟2樓說的比較相似!
------解決方案--------------------既然是控制器的基類??刂破鞑欢伎梢宰裱愄峁┑臉藴蕡?zhí)行數(shù)據(jù)?
------解決方案--------------------
我以為你應經(jīng)被各種名詞帶入到一個誤區(qū)了
你實際上是想在各個功能模塊間傳遞某中信息
其實這是很容易實現(xiàn)的一種機制,就是操作系統(tǒng)中廣泛使用的事件驅(qū)動或消息驅(qū)動
一個模塊將自己的需求廣播出去,能夠?qū)崿F(xiàn)此需求的模塊就此需求返回需要的數(shù)據(jù)