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楼说的比较相似!
------解决方案--------------------
既然是控制器的基类。控制器不都可以遵循基类提供的标准执行数据?
------解决方案--------------------
我以为你应经被各种名词带入到一个误区了
你实际上是想在各个功能模块间传递某中信息
其实这是很容易实现的一种机制,就是操作系统中广泛使用的事件驱动或消息驱动
一个模块将自己的需求广播出去,能够实现此需求的模块就此需求返回需要的数据

许多用户在选择智能手表的时候都会选择的华为的品牌,其中华为GT3pro和GT4都是非常热门的选择,不少用户都很好奇华为GT3pro和GT4有什么区别,下面就就给大家介绍一下二者。华为GT3pro和GT4有什么区别一、外观GT4:46mm和41mm,材质是玻璃表镜+不锈钢机身+高分纤维后壳。GT3pro:46.6mm和42.9mm,材质是蓝宝石玻璃表镜+钛金属机身/陶瓷机身+陶瓷后壳二、健康GT4:采用最新的华为Truseen5.5+算法,结果会更加的精准。GT3pro:多了ECG心电图和血管及安

function是函数的意思,是一段具有特定功能的可重复使用的代码块,是程序的基本组成单元之一,可以接受输入参数,执行特定的操作,并返回结果,其目的是封装一段可重复使用的代码,提高代码的可重用性和可维护性。

为什么截图工具在Windows11上不起作用了解问题的根本原因有助于找到正确的解决方案。以下是截图工具可能无法正常工作的主要原因:对焦助手已打开:这可以防止截图工具打开。应用程序损坏:如果截图工具在启动时崩溃,则可能已损坏。过时的图形驱动程序:不兼容的驱动程序可能会干扰截图工具。来自其他应用程序的干扰:其他正在运行的应用程序可能与截图工具冲突。证书已过期:升级过程中的错误可能会导致此issu简单的解决方案这些适合大多数用户,不需要任何特殊的技术知识。1.更新窗口和Microsoft应用商店应用程

《Laravel中take和limit的使用方法详解》在Laravel中,take和limit是两个常用的方法,用于在数据库查询中限制返回的记录数。虽然它们的作用类似,但在具体的使用场景中有一些细微的区别。本文将详细解析这两个方法的用法,并提供具体的代码示例。一、take方法在Laravel中,take方法用于限制返回的记录数,通常结合orderBy方法一起

第1部分:初始故障排除步骤检查苹果的系统状态:在深入研究复杂的解决方案之前,让我们从基础知识开始。问题可能不在于您的设备;苹果的服务器可能会关闭。访问Apple的系统状态页面,查看AppStore是否正常工作。如果有问题,您所能做的就是等待Apple修复它。检查您的互联网连接:确保您拥有稳定的互联网连接,因为“无法连接到AppStore”问题有时可归因于连接不良。尝试在Wi-Fi和移动数据之间切换或重置网络设置(“常规”>“重置”>“重置网络设置”>设置)。更新您的iOS版本:

Laravel集合中的Where方法实用指南在Laravel框架的开发过程中,集合(Collection)是一个非常有用的数据结构,它提供了丰富的方法来操作数据。其中,Where方法是一个常用的筛选方法,能够根据指定条件来过滤集合中的元素。本文将介绍Laravel集合中Where方法的使用,通过具体的代码示例来演示其用法。1.基本用法Where方法的

php提交表单通过后,弹出的对话框怎样在当前页弹出php提交表单通过后,弹出的对话框怎样在当前页弹出而不是在空白页弹出?想实现这样的效果:而不是空白页弹出:------解决方案--------------------如果你的验证用PHP在后端,那么就用Ajax;仅供参考:HTML code<form name="myform"

在本文中,我们将了解enumerate()函数以及Python中“enumerate()”函数的用途。什么是enumerate()函数?Python的enumerate()函数接受数据集合作为参数并返回一个枚举对象。枚举对象以键值对的形式返回。key是每个item对应的索引,value是items。语法enumerate(iterable,start)参数iterable-传入的数据集合可以作为枚举对象返回,称为iterablestart-顾名思义,枚举对象的起始索引由start定义。如果我们忽


热AI工具

Undresser.AI Undress
人工智能驱动的应用程序,用于创建逼真的裸体照片

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

Undress AI Tool
免费脱衣服图片

Clothoff.io
AI脱衣机

AI Hentai Generator
免费生成ai无尽的。

热门文章

热工具

安全考试浏览器
Safe Exam Browser是一个安全的浏览器环境,用于安全地进行在线考试。该软件将任何计算机变成一个安全的工作站。它控制对任何实用工具的访问,并防止学生使用未经授权的资源。

ZendStudio 13.5.1 Mac
功能强大的PHP集成开发环境

MinGW - 适用于 Windows 的极简 GNU
这个项目正在迁移到osdn.net/projects/mingw的过程中,你可以继续在那里关注我们。MinGW:GNU编译器集合(GCC)的本地Windows移植版本,可自由分发的导入库和用于构建本地Windows应用程序的头文件;包括对MSVC运行时的扩展,以支持C99功能。MinGW的所有软件都可以在64位Windows平台上运行。

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

EditPlus 中文破解版
体积小,语法高亮,不支持代码提示功能