PHP 集約カップリング? ? ?
これは一般的なモデル インターフェイスです:
PHP コード
<!--
Code highlighting produced by Actipro CodeHighlighter (freeware)
http://www.CodeHighlighter.com/
-->interface API{
public function main();
public function params($value);
}
次に、一般的なモデル クラスがそれを継承します:
PHP コード
<!--
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 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(); メソッドを変更するだけで済みます。データを取り出す方法はありますか? ?
言い換えれば、データ結合の例を教えていただき、ご自身で勉強していただけます...
ありがとうございます!
(注: 上記のコードは完璧だと言う人もいるかもしれません。確かに、フロントエンド コントローラーからいくつかのものを統合しましたが、これは今日の私の議論の焦点ではありません。持ってきてください。見づらくてごめんなさい)
-----解決策---------
正直に言うと、私はあなたが何をしようとしているのか本当に理解できません。 。 。
しかし、データ層が対話したい場合は、明らかに制御層を介して行う必要があります。そうでない場合、制御層は何をすべきでしょうか?データ間の特定のビジネス ロジック関係を知っているのは制御層だけであり、モデルはそれ自体の 3 分の 1 エーカーのみを考慮する必要があり、この範囲を超えるものはすべて上位層に引き渡されて処理されるためです。
さらに言及した $db->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 または、基礎となるモデルの基本クラスをカプセル化することもできます
basemodel::fetch($where, $order, $limit) {
$db = db::main() ;
return $db->select('*')->where($where)->order()->limit();
}
モデル ベース
クラス テストは、ベースモデルを拡張し、API {
function dothing(){
parent::fetch($where, $order, $limit);
}
}
Iこれがデータ結合と何の関係があるのか理解できません。これは db の呼び出しをカプセル化しただけです。
-----解決策---------2階の言うことは一理あると個人的には思う結合を減らす方法は、表示層は表示のみを担当し、ロジック処理はビジネス ロジック層に引き継ぎ、データ アクセス層はデータ処理のみを担当し、それぞれが独自の処理を行うことです。
データベース クラスの問題に関しては、uchome のデータベース クラスをご覧になることをお勧めします。彼のクラスは非常によく書かれており、2 階で説明したものと似ていると思います。
------解決策---------これはコントローラーの基本クラスなので。すべてのコントローラーは、基本クラスによって提供される標準実行データに従うことはできませんか?
------解決策------------------
さまざまな用語によって誤解されているようです
実際には、さまざまな機能モジュール間で特定の情報を転送したいと考えています
実際、これは実装が簡単なメカニズム、つまりオペレーティング システム内にあります。広く使用されているイベント駆動型またはメッセージ駆動型
モジュールは独自の要件をブロードキャストし、この要件を実装できるモジュールはこの要件に必要なデータを返します