国产av日韩一区二区三区精品,成人性爱视频在线观看,国产,欧美,日韩,一区,www.成色av久久成人,2222eeee成人天堂

PHP聚合耦合?解決方案

php中文網(wǎng)
發(fā)布: 2016-06-13 13:33:22
原創(chuàng)
1757人瀏覽過

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ù)
PHP速學教程(入門到精通)
PHP速學教程(入門到精通)

PHP怎么學習?PHP怎么入門?PHP在哪學?PHP怎么學才快?不用擔心,這里為大家提供了PHP速學教程(入門到精通),有需要的小伙伴保存下載就能學習啦!

下載
來源:php中文網(wǎng)
本文內(nèi)容由網(wǎng)友自發(fā)貢獻,版權歸原作者所有,本站不承擔相應法律責任。如您發(fā)現(xiàn)有涉嫌抄襲侵權的內(nèi)容,請聯(lián)系admin@php.cn
最新問題
開源免費商場系統(tǒng)廣告
最新下載
更多>
網(wǎng)站特效
網(wǎng)站源碼
網(wǎng)站素材
前端模板
關于我們 免責申明 意見反饋 講師合作 廣告合作 最新更新
php中文網(wǎng):公益在線php培訓,幫助PHP學習者快速成長!
關注服務號 技術交流群
PHP中文網(wǎng)訂閱號
每天精選資源文章推送
PHP中文網(wǎng)APP
隨時隨地碎片化學習
PHP中文網(wǎng)抖音號
發(fā)現(xiàn)有趣的

Copyright 2014-2025 http://m.miracleart.cn/ All Rights Reserved | php.cn | 湘ICP備2023035733號