首頁 後端開發 php教程 PHP聚合耦合?解决方案

PHP聚合耦合?解决方案

Jun 13, 2016 pm 01:33 PM
function gt limit order where

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后实例化模型类,调用接口,传递模型数据:
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();
}
}

登入後複製


这是我做的简单的耦合结构,但是,这只是相对于控制器和模型类之间的耦合,而且是通用类,如果是特殊类还得使用特殊的接口和控制器,但问题不在这,问题在于我想让模型之间也通过接口交互(数据耦合?),但是想了很多也没有实际的解决办法,该怎样做这个接口呢???
比如,我需要调用一个数据库类的函数,一般情况下是直接调用:
  $db = db::main();
  #db -> Query(***********************);
但是,这不符合低耦合概念,我只要一改Query();方法就完蛋了,有什么办法能拉取数据??
或者说,给个数据耦合的实例也行,自己慢慢研究算了....
谢谢啦!
(注:我知道,可能会有人说上面的代码不过完善什么的?的确,我是把前端控制器的一些东西都集成起来了,但这不是我今天讨论的焦点,如果给大家带来了视觉上的不便,请见谅)

------解决方案--------------------
说是实话非常不明白你到底要做什么。。。

但是数据层要交互的话,明显应该通过控制层来做,否则要控制层做什么?因为只有控制层知道数据之间有什么具体业务逻辑上的关系,而model仅仅应该关心的是自己的一亩三分地,超出这个范围之外的都应该交给上层处理,这样才是降低了耦合!

另外提到的$db->query的问题,明显可以通过抽离字段、条件、排序等,将query转换成

$db->select()->where()->order()->limit()

下面有2种方式:

1 然后接着抽象

$db::fetch($where, $order, $limit) {
 return $db->select('*')->where($where)->order()->limit();

}

调用的时候

$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);
}
}

没有明白这个和数据耦合有什么关系,这仅仅是调用db的封装!
------解决方案--------------------
2楼得说的有理,我个人认为降低耦合的办法就是显示层只负责显示,逻辑处理就交个业务逻辑层,数据访问层只管处理数据,个做个的事!
关于数据库类得问题,我建议你去看看uchome的数据库类,我觉得他的类写得还不错,跟2楼说的比较相似!
------解决方案--------------------
既然是控制器的基类。控制器不都可以遵循基类提供的标准执行数据?
------解决方案--------------------
我以为你应经被各种名词带入到一个误区了
你实际上是想在各个功能模块间传递某中信息
其实这是很容易实现的一种机制,就是操作系统中广泛使用的事件驱动或消息驱动
一个模块将自己的需求广播出去,能够实现此需求的模块就此需求返回需要的数据
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

AI Hentai Generator

AI Hentai Generator

免費產生 AI 無盡。

熱門文章

R.E.P.O.能量晶體解釋及其做什麼(黃色晶體)
2 週前 By 尊渡假赌尊渡假赌尊渡假赌
倉庫:如何復興隊友
4 週前 By 尊渡假赌尊渡假赌尊渡假赌
Hello Kitty Island冒險:如何獲得巨型種子
3 週前 By 尊渡假赌尊渡假赌尊渡假赌

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發環境

Dreamweaver CS6

Dreamweaver CS6

視覺化網頁開發工具

SublimeText3 Mac版

SublimeText3 Mac版

神級程式碼編輯軟體(SublimeText3)

華為GT3 Pro和GT4的差異是什麼? 華為GT3 Pro和GT4的差異是什麼? Dec 29, 2023 pm 02:27 PM

華為GT3 Pro和GT4的差異是什麼?

function是什麼意思 function是什麼意思 Aug 04, 2023 am 10:33 AM

function是什麼意思

修復:截圖工具在 Windows 11 中不起作用 修復:截圖工具在 Windows 11 中不起作用 Aug 24, 2023 am 09:48 AM

修復:截圖工具在 Windows 11 中不起作用

Laravel中take和limit的使用方法詳解 Laravel中take和limit的使用方法詳解 Mar 10, 2024 pm 05:51 PM

Laravel中take和limit的使用方法詳解

如何修復無法連線到iPhone上的App Store錯誤 如何修復無法連線到iPhone上的App Store錯誤 Jul 29, 2023 am 08:22 AM

如何修復無法連線到iPhone上的App Store錯誤

php提交表单通过后,弹出的对话框怎样在当前页弹出,该如何解决 php提交表单通过后,弹出的对话框怎样在当前页弹出,该如何解决 Jun 13, 2016 am 10:23 AM

php提交表单通过后,弹出的对话框怎样在当前页弹出,该如何解决

Laravel 集合中的 Where 方法實用指南 Laravel 集合中的 Where 方法實用指南 Mar 10, 2024 pm 04:36 PM

Laravel 集合中的 Where 方法實用指南

Laravel 集合如何使用 Where 方法 Laravel 集合如何使用 Where 方法 Mar 10, 2024 pm 10:21 PM

Laravel 集合如何使用 Where 方法

See all articles