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

Heiße KI -Werkzeuge

Undresser.AI Undress
KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover
Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Undress AI Tool
Ausziehbilder kostenlos

Clothoff.io
KI-Kleiderentferner

AI Hentai Generator
Erstellen Sie kostenlos Ai Hentai.

Heißer Artikel

Heiße Werkzeuge

Notepad++7.3.1
Einfach zu bedienender und kostenloser Code-Editor

SublimeText3 chinesische Version
Chinesische Version, sehr einfach zu bedienen

Senden Sie Studio 13.0.1
Leistungsstarke integrierte PHP-Entwicklungsumgebung

Dreamweaver CS6
Visuelle Webentwicklungstools

SublimeText3 Mac-Version
Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

Heiße Themen



Viele Benutzer werden sich bei der Auswahl von Smartwatches für die Marke Huawei entscheiden. Viele Benutzer sind neugierig auf den Unterschied zwischen Huawei GT3pro und GT4. Was sind die Unterschiede zwischen Huawei GT3pro und GT4? 1. Aussehen GT4: 46 mm und 41 mm, das Material ist Glasspiegel + Edelstahlgehäuse + hochauflösende Faserrückschale. GT3pro: 46,6 mm und 42,9 mm, das Material ist Saphirglas + Titangehäuse/Keramikgehäuse + Keramikrückschale 2. Gesundes GT4: Mit dem neuesten Huawei Truseen5.5+-Algorithmus werden die Ergebnisse genauer. GT3pro: EKG-Elektrokardiogramm sowie Blutgefäß und Sicherheit hinzugefügt

Funktion bedeutet Funktion. Es handelt sich um einen wiederverwendbaren Codeblock mit bestimmten Funktionen. Er kann Eingabeparameter akzeptieren, bestimmte Operationen ausführen und Ergebnisse zurückgeben. Code, um die Wiederverwendbarkeit und Wartbarkeit des Codes zu verbessern.

„Detaillierte Erläuterung der Verwendung von Take und Limit in Laravel“ In Laravel sind Take und Limit zwei häufig verwendete Methoden, mit denen die Anzahl der in Datenbankabfragen zurückgegebenen Datensätze begrenzt wird. Obwohl ihre Funktionen ähnlich sind, gibt es einige subtile Unterschiede in bestimmten Nutzungsszenarien. In diesem Artikel wird die Verwendung dieser beiden Methoden im Detail analysiert und spezifische Codebeispiele bereitgestellt. 1. Take-Methode In Laravel wird die Take-Methode verwendet, um die Anzahl der zurückgegebenen Datensätze zu begrenzen, normalerweise in Kombination mit der orderBy-Methode.

Warum das Snipping-Tool unter Windows 11 nicht funktioniert Das Verständnis der Grundursache des Problems kann dabei helfen, die richtige Lösung zu finden. Hier sind die häufigsten Gründe, warum das Snipping Tool möglicherweise nicht ordnungsgemäß funktioniert: Focus Assistant ist aktiviert: Dies verhindert, dass das Snipping Tool geöffnet wird. Beschädigte Anwendung: Wenn das Snipping-Tool beim Start abstürzt, ist es möglicherweise beschädigt. Veraltete Grafiktreiber: Inkompatible Treiber können das Snipping-Tool beeinträchtigen. Störungen durch andere Anwendungen: Andere laufende Anwendungen können mit dem Snipping Tool in Konflikt geraten. Das Zertifikat ist abgelaufen: Ein Fehler während des Upgrade-Vorgangs kann zu diesem Problem führen. Diese einfache Lösung ist für die meisten Benutzer geeignet und erfordert keine besonderen technischen Kenntnisse. 1. Aktualisieren Sie Windows- und Microsoft Store-Apps

Teil 1: Erste Schritte zur Fehlerbehebung Überprüfen des Apple-Systemstatus: Bevor wir uns mit komplexen Lösungen befassen, beginnen wir mit den Grundlagen. Das Problem liegt möglicherweise nicht an Ihrem Gerät; die Server von Apple sind möglicherweise ausgefallen. Besuchen Sie die Systemstatusseite von Apple, um zu sehen, ob der AppStore ordnungsgemäß funktioniert. Wenn es ein Problem gibt, können Sie nur warten, bis Apple es behebt. Überprüfen Sie Ihre Internetverbindung: Stellen Sie sicher, dass Sie über eine stabile Internetverbindung verfügen, da das Problem „Verbindung zum AppStore nicht möglich“ manchmal auf eine schlechte Verbindung zurückzuführen ist. Versuchen Sie, zwischen WLAN und mobilen Daten zu wechseln oder die Netzwerkeinstellungen zurückzusetzen (Allgemein > Zurücksetzen > Netzwerkeinstellungen zurücksetzen > Einstellungen). Aktualisieren Sie Ihre iOS-Version:

Praktischer Leitfaden zur Where-Methode in Laravel-Sammlungen Während der Entwicklung des Laravel-Frameworks stellen Sammlungen eine sehr nützliche Datenstruktur dar, die umfangreiche Methoden zur Datenbearbeitung bereitstellt. Unter diesen ist die Where-Methode eine häufig verwendete Filtermethode, mit der Elemente in einer Sammlung basierend auf bestimmten Bedingungen gefiltert werden können. In diesem Artikel wird die Verwendung der Where-Methode in Laravel-Sammlungen vorgestellt und ihre Verwendung anhand spezifischer Codebeispiele demonstriert. 1. Grundlegende Verwendung der Where-Methode

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

In diesem Artikel lernen wir die Funktion enumerate() und den Zweck der Funktion „enumerate()“ in Python kennen. Was ist die Funktion enumerate()? Die Funktion enumerate() von Python akzeptiert eine Datensammlung als Parameter und gibt ein Aufzählungsobjekt zurück. Aufzählungsobjekte werden als Schlüssel-Wert-Paare zurückgegeben. Der Schlüssel ist der Index, der jedem Element entspricht, und der Wert sind die Elemente. Syntax enumerate(iterable,start) Parameter iterable – Die übergebene Datensammlung kann als Aufzählungsobjekt namens iterablestart zurückgegeben werden – Wie der Name schon sagt, wird der Startindex des Aufzählungsobjekts durch start definiert. wenn wir es ignorieren
