PHP聚合耦合?解決方案
Jun 13, 2016 pm 01:33 PM
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(); } }
這是我做的簡單的耦合結(jié)構(gòu),但是,這只是相對于控制器和模型類之間的耦合,而且是通用類,如果是特殊類還得使用特殊的接口和控制器,但問題不在這,問題在于我想讓模型之間也通過接口交互(數(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è)務邏輯上的關(guān)系,而model僅僅應該關(guān)心的是自己的一畝三分地,超出這個范圍之外的都應該交給上層處理,這樣才是降低了耦合!
另外提到的$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ù)耦合有什么關(guān)系,這僅僅是調(diào)用db的封裝!
------解決方案--------------------
2樓得說的有理,我個人認為降低耦合的辦法就是顯示層只負責顯示,邏輯處理就交個業(yè)務邏輯層,數(shù)據(jù)訪問層只管處理數(shù)據(jù),個做個的事!
關(guān)于數(shù)據(jù)庫類得問題,我建議你去看看uchome的數(shù)據(jù)庫類,我覺得他的類寫得還不錯,跟2樓說的比較相似!
------解決方案--------------------
既然是控制器的基類??刂破鞑欢伎梢宰裱愄峁┑臉藴蕡?zhí)行數(shù)據(jù)?
------解決方案--------------------
我以為你應經(jīng)被各種名詞帶入到一個誤區(qū)了
你實際上是想在各個功能模塊間傳遞某中信息
其實這是很容易實現(xiàn)的一種機制,就是操作系統(tǒng)中廣泛使用的事件驅(qū)動或消息驅(qū)動
一個模塊將自己的需求廣播出去,能夠?qū)崿F(xiàn)此需求的模塊就此需求返回需要的數(shù)據(jù)

熱AI工具

Undress AI Tool
免費脫衣服圖片

Undresser.AI Undress
人工智能驅(qū)動的應用程序,用于創(chuàng)建逼真的裸體照片

AI Clothes Remover
用于從照片中去除衣服的在線人工智能工具。

Clothoff.io
AI脫衣機

Video Face Swap
使用我們完全免費的人工智能換臉工具輕松在任何視頻中換臉!

熱門文章

熱工具

記事本++7.3.1
好用且免費的代碼編輯器

SublimeText3漢化版
中文版,非常好用

禪工作室 13.0.1
功能強大的PHP集成開發(fā)環(huán)境

Dreamweaver CS6
視覺化網(wǎng)頁開發(fā)工具

SublimeText3 Mac版
神級代碼編輯軟件(SublimeText3)

許多用戶在選擇智能手表的時候都會選擇的華為的品牌,其中華為GT3pro和GT4都是非常熱門的選擇,不少用戶都很好奇華為GT3pro和GT4有什么區(qū)別,下面就就給大家介紹一下二者。華為GT3pro和GT4有什么區(qū)別一、外觀GT4:46mm和41mm,材質(zhì)是玻璃表鏡+不銹鋼機身+高分纖維后殼。GT3pro:46.6mm和42.9mm,材質(zhì)是藍寶石玻璃表鏡+鈦金屬機身/陶瓷機身+陶瓷后殼二、健康GT4:采用最新的華為Truseen5.5+算法,結(jié)果會更加的精準。GT3pro:多了ECG心電圖和血管及安

《Laravel中take和limit的使用方法詳解》在Laravel中,take和limit是兩個常用的方法,用于在數(shù)據(jù)庫查詢中限制返回的記錄數(shù)。雖然它們的作用類似,但在具體的使用場景中有一些細微的區(qū)別。本文將詳細解析這兩個方法的用法,并提供具體的代碼示例。一、take方法在Laravel中,take方法用于限制返回的記錄數(shù),通常結(jié)合orderBy方法一起

為什么截圖工具在Windows11上不起作用了解問題的根本原因有助于找到正確的解決方案。以下是截圖工具可能無法正常工作的主要原因:對焦助手已打開:這可以防止截圖工具打開。應用程序損壞:如果截圖工具在啟動時崩潰,則可能已損壞。過時的圖形驅(qū)動程序:不兼容的驅(qū)動程序可能會干擾截圖工具。來自其他應用程序的干擾:其他正在運行的應用程序可能與截圖工具沖突。證書已過期:升級過程中的錯誤可能會導致此issu簡單的解決方案這些適合大多數(shù)用戶,不需要任何特殊的技術(shù)知識。1.更新窗口和Microsoft應用商店應用程

function是函數(shù)的意思,是一段具有特定功能的可重復使用的代碼塊,是程序的基本組成單元之一,可以接受輸入?yún)?shù),執(zhí)行特定的操作,并返回結(jié)果,其目的是封裝一段可重復使用的代碼,提高代碼的可重用性和可維護性。

Laravel集合中的Where方法實用指南在Laravel框架的開發(fā)過程中,集合(Collection)是一個非常有用的數(shù)據(jù)結(jié)構(gòu),它提供了豐富的方法來操作數(shù)據(jù)。其中,Where方法是一個常用的篩選方法,能夠根據(jù)指定條件來過濾集合中的元素。本文將介紹Laravel集合中Where方法的使用,通過具體的代碼示例來演示其用法。1.基本用法Where方法的

第1部分:初始故障排除步驟檢查蘋果的系統(tǒng)狀態(tài):在深入研究復雜的解決方案之前,讓我們從基礎知識開始。問題可能不在于您的設備;蘋果的服務器可能會關(guān)閉。訪問Apple的系統(tǒng)狀態(tài)頁面,查看AppStore是否正常工作。如果有問題,您所能做的就是等待Apple修復它。檢查您的互聯(lián)網(wǎng)連接:確保您擁有穩(wěn)定的互聯(lián)網(wǎng)連接,因為“無法連接到AppStore”問題有時可歸因于連接不良。嘗試在Wi-Fi和移動數(shù)據(jù)之間切換或重置網(wǎng)絡設置(“常規(guī)”>“重置”>“重置網(wǎng)絡設置”>設置)。更新您的iOS版本:

MySQL.proc表的作用和功能詳解MySQL是一種流行的關(guān)系型數(shù)據(jù)庫管理系統(tǒng),開發(fā)者在使用MySQL時常常會涉及到存儲過程(StoredProcedure)的創(chuàng)建和管理。而MySQL.proc表則是一個非常重要的系統(tǒng)表,它存儲了數(shù)據(jù)庫中所有的存儲過程的相關(guān)信息,包括存儲過程的名稱、定義、參數(shù)等。在本文中,我們將詳細解釋MySQL.proc表的作用和功能

在Laravel中,我們經(jīng)常會用到一些方法來限制查詢結(jié)果的數(shù)量,其中包括take和limit兩個方法。雖然它們都可以用來限制查詢結(jié)果的數(shù)量,但它們之間確實有一些細微的區(qū)別。在本文中,我們將深入探討take和limit在Laravel中的不同之處,并通過具體的代碼示例來加以說明。首先,讓我們來看一下take方法。take方法是Eloquent的一部分,通常用于
