PHP 集約カップリング?解決
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 階で説明したものと似ていると思います。
------解決策---------
これはコントローラーの基本クラスなので。すべてのコントローラーは、基本クラスによって提供される標準実行データに従うことはできませんか?
------解決策------------------
さまざまな用語によって誤解されているようです
実際には、さまざまな機能モジュール間で特定の情報を転送したいと考えています
実際、これは実装が簡単なメカニズム、つまりオペレーティング システム内にあります。広く使用されているイベント駆動型またはメッセージ駆動型
モジュールは独自の要件をブロードキャストし、この要件を実装できるモジュールはこの要件に必要なデータを返します

ホットAIツール

Undresser.AI Undress
リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover
写真から衣服を削除するオンライン AI ツール。

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

Video Face Swap
完全無料の AI 顔交換ツールを使用して、あらゆるビデオの顔を簡単に交換できます。

人気の記事

ホットツール

メモ帳++7.3.1
使いやすく無料のコードエディター

SublimeText3 中国語版
中国語版、とても使いやすい

ゼンドスタジオ 13.0.1
強力な PHP 統合開発環境

ドリームウィーバー CS6
ビジュアル Web 開発ツール

SublimeText3 Mac版
神レベルのコード編集ソフト(SublimeText3)

ホットトピック











多くのユーザーはスマートウォッチを選ぶときにファーウェイブランドを選択しますが、その中でもファーウェイ GT3pro と GT4 は非常に人気のある選択肢であり、多くのユーザーはファーウェイ GT3pro と GT4 の違いに興味を持っています。 Huawei GT3pro と GT4 の違いは何ですか? 1. 外観 GT4: 46mm と 41mm、材質はガラスミラー + ステンレススチールボディ + 高解像度ファイバーバックシェルです。 GT3pro: 46.6mm および 42.9mm、材質はサファイアガラス + チタンボディ/セラミックボディ + セラミックバックシェルです。 2. 健全な GT4: 最新の Huawei Truseen5.5+ アルゴリズムを使用すると、結果はより正確になります。 GT3pro: ECG 心電図と血管と安全性を追加

ファンクションとは、関数を意味します。これは、特定の関数を備えた再利用可能なコード ブロックです。プログラムの基本コンポーネントの 1 つです。入力パラメータを受け取り、特定の操作を実行し、結果を返すことができます。その目的は、再利用可能なコード ブロックをカプセル化することです。コードの再利用性と保守性を向上させるコード。

「Laravelのtakeとlimitの使い方を詳しく解説」 Laravelではtakeとlimitの2つがよく使われており、データベースクエリで返されるレコード数を制限するために使用されます。これらの機能は似ていますが、特定の使用シナリオでは微妙な違いがいくつかあります。この記事では、これら 2 つのメソッドの使用法を詳細に分析し、具体的なコード例を示します。 1. Take メソッド Laravel では、take メソッドは返されるレコードの数を制限するために使用され、通常は orderBy メソッドと組み合わせられます。

Windows 11 で Snipping Tool が機能しない理由 問題の根本原因を理解すると、適切な解決策を見つけるのに役立ちます。 Snipping Tool が正しく動作しない主な理由は次のとおりです。 フォーカス アシスタントがオンになっている: これにより、Snipping Tool が開かなくなります。破損したアプリケーション: 起動時にスニッピング ツールがクラッシュする場合は、破損している可能性があります。古いグラフィック ドライバー: 互換性のないドライバーは、スニッピング ツールに干渉する可能性があります。他のアプリケーションからの干渉: 実行中の他のアプリケーションが Snipping Tool と競合する可能性があります。証明書の有効期限が切れています: アップグレード プロセス中のエラーにより、この問題が発生する可能性があります。これらの簡単な解決策は、ほとんどのユーザーに適しており、特別な技術知識は必要ありません。 1. Windows および Microsoft Store アプリを更新する

Laravel コレクションの Where メソッドに関する実践ガイド Laravel フレームワークの開発中、コレクションは、データを操作するための豊富なメソッドを提供する非常に便利なデータ構造です。中でも、Where メソッドは、指定した条件に基づいてコレクション内の要素をフィルタリングできる、一般的に使用されるフィルタリング メソッドです。この記事では、Laravel コレクションでの Where メソッドの使用法を紹介し、特定のコード例を通じてその使用法を示します。 1. Whereメソッドの基本的な使い方

この記事では、Python の enumerate() 関数と「enumerate()」関数の目的について学びます。 enumerate() 関数とは何ですか? Python の enumerate() 関数は、データ コレクションをパラメータとして受け取り、列挙オブジェクトを返します。列挙オブジェクトはキーと値のペアとして返されます。キーは各項目に対応するインデックス、値は項目です。構文 enumerate(iterable,start) パラメータ iterable - 渡されたデータ コレクションは、iterablestart と呼ばれる列挙オブジェクトとして返すことができます。 - 名前が示すように、列挙オブジェクトの開始インデックスは start によって定義されます。無視したら

MySQL.proc テーブルの役割と機能の詳細な説明。MySQL は人気のあるリレーショナル データベース管理システムです。開発者が MySQL を使用する場合、多くの場合、ストアド プロシージャ (StoredProcedure) の作成と管理が必要になります。 MySQL.proc テーブルは非常に重要なシステム テーブルであり、ストアド プロシージャの名前、定義、パラメータなど、データベース内のすべてのストアド プロシージャに関連する情報が保存されます。この記事では、MySQL.proc テーブルの役割と機能について詳しく説明します。

パート 1: 最初のトラブルシューティング手順 Apple のシステムステータスを確認する: 複雑な解決策を掘り下げる前に、基本から始めましょう。問題はデバイスにあるのではなく、Apple のサーバーがダウンしている可能性があります。 Apple のシステム ステータス ページにアクセスして、AppStore が適切に動作しているかどうかを確認してください。問題があれば、Apple が修正してくれるのを待つしかありません。インターネット接続を確認します。「AppStore に接続できません」問題は接続不良が原因である場合があるため、安定したインターネット接続があることを確認してください。 Wi-Fi とモバイル データを切り替えるか、ネットワーク設定をリセットしてみてください ([一般] > [リセット] > [ネットワーク設定のリセット] > [設定])。 iOS バージョンを更新します。
