検索
ホームページphp教程php手册PHPの3層構造(その1) 簡単な3層構造

PHPの3層構造(その1) 簡単な3層構造

Jun 13, 2016 pm 12:15 PM
classphp優れたコードコピー外観に追加単純構造

コード 1 に示すように:

コード をコピーします。 コードは次のとおりです:


// コード 1
//外観層クラス
class LWordHomePage {
//メッセージを追加します
public function append($newLWord) {
//中間サービス層を呼び出します
$serv = new LWordServiceCore()
$serv- >append($newLWord);
}
}
// 中間サービス層
class LWordServiceCore {
// メッセージを追加
public function append( $newLWord) {
// データ アクセス層を呼び出します
$dbTask = new LWordDBTask();
$dbTask->append($newLWord);
}; >// データ アクセス層
class LWordDBTask {
//メッセージ追加
public function append($newLWord) {
//データ層コード (省略)
}
};


図 1 に示す実行タイミング図:



(図 1)、単純な 3 層構造のタイミング図

3 層構造の呼び出しシーケンスは、コードとタイミング図から直感的に理解できます。しかし、実際の開発では、この単純な 3 層構造ではニーズを満たすことができません。外観層と中間サービス層のコードから始めましょう。

外観レイヤー

LWordHomePage クラスの new キーワードを直接使用して、中間サービス クラス LWordServiceCore はハードコーディング メソッドです。 実際のプロジェクト開発プロセスでは、外観層と中間サービス層が別の人によって開発される場合があります。つまり、機能モジュールは複数の人によって完成されます。外観層の LWordHomePage クラスの開発進捗は、LWordServiceCore クラスが完全に開発されるまで待つことができません (つまり、 外観層は、中間のサービス層が完全に開発されるまで待って開始することはできません)。このような連携は非常に非効率です。 プロジェクトを複数人で同時に開発できるようにするには、コード設計をカットする必要があります。アピアランス層の開発進捗に合わせて、一時的な中間サービスクラスを編成することも可能です。中間サービス層が完全に開発されたら、それを置き換えるだけです...図 2 に示すように:

(図 2)、外観レイヤーは異なるサービス間を切り替えます

明らかに、このような要件を達成するために、新しいキーワードを直接使用して外観レイヤーで LWordServiceCore クラスを作成して呼び出すのは非常に柔軟性がありません。臨機応変かつ自由に切り替えるのは難しい! !中間サービス層の一時的な実装として機能する TempService クラスを作成できます。また、TempService と LWordServiceCore という 2 つのクラスも分析する必要があります。どちらもメッセージを追加するための同じ追加関数を持っていますが、1 つは一時的なもので、もう 1 つは本物です。 TempService クラスと LWordServiceCore クラスは両方ともパブリック関数を持っているため、共通の親クラスが必要です。このパブリック上位クラスには他のメンバーや属性が存在しないことを考慮して、このパブリック上位クラスはインターフェイス、つまり ILWordService! として定義されます。 UML クラス図を図 3 に示します。


(図 3) ILWordService インターフェイスの定義と実装

TempService または LWordServiceCore クラスのオブジェクトは、LWordHomePage クラス内で直接作成されません。作成プロセスはファクトリ クラス MyServiceFactory (シンプル ファクトリ モード) に渡されます。

このように、外観レイヤーの

LWordHomePage クラスは、ILWordService インターフェイスと外観レイヤーのみを認識する必要があります。コードは、外観層と特定のサービス コードの優れた分離を達成するために、特定の中間サービス コードが何であるかに注意を払います。 これは何に相当しますか?ちょうど 2 人のハードウェア エンジニアのように、1 人はコンピュータ グラフィックス カードを製造し、もう 1 人はコンピュータのマザーボードを製造します。グラフィックス カードを製造するエンジニアは、グラフィックス カードをテスト回路に挿入して、グラフィックス カードが適切に動作するかどうかをテストできます。同様に、マザーボードを製造するエンジニアは、マザーボードを別のテスト回路に挿入して、マザーボードが適切に動作するかどうかをテストすることもできます。 2 人のエンジニアが作業を完了したら、作業結果を結び付けることができます。これは、ほぼ半分の時間を節約できる並行開発方法です。ソフトウェアエンジニアリングの観点から、インターフェースコードを設計する際には、生産効率を向上させるために複数人による同時開発をサポートする必要があるかどうかも考慮する必要があります。

UML クラス図 (図 3 を参照) に従って、コード 2 に示すように PHP コードを変更します。


コードをコピーします

コードは次のとおりです:


// コード 2、ファクトリを通じてメッセージ サービスを作成し、
// 外観レイヤー クラス
class LWordHomePage {
// メッセージを追加
public function append($newLWord) {
// 中間サービスを呼び出します
$serv = MyServiceFactory::create();
// これは LWordService クラスではなく、ILWordService インターフェイスを操作していることに注意してください
$serv->append( $newLWord );
}
};

// メッセージ サービス インターフェイス
interface ILWordService {
public function append($newLWord); 🎜> //サービスファクトリークラス
class MyServiceFactory {
// メッセージの作成 service
public static function create() {
if (1) {
// 中間サービス層に戻る
return new LWordServiceCore();
} else {
// 一時的な実装を返します
return new TempService();
}
} // 一時サービス Class
class TempServiceimplements ILWordService {
//メッセージ追加
public function append($newLWord) {
//一時コード(省略)
}
};

// 中間サービス層
class LWordServiceCoreimplements ILWordService {
// メッセージを追加
public function append($newLWord) {
// データ アクセス層を呼び出す
$ dbTask = new LWordDBTask ();
$dbTask->append($newLWord)

};

クラス LWordDBTask {
// メッセージを追加
public function append($newLWord) {
// データ層コード (省略)
}
};





タイミング図を図 4 に示します。



(図 4) ファクトリ クラスを使用してメッセージ サービスを作成します

声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

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

AI Clothes Remover

AI Clothes Remover

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

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

Video Face Swap

Video Face Swap

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

ホットツール

AtomエディタMac版ダウンロード

AtomエディタMac版ダウンロード

最も人気のあるオープンソースエディター

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SecLists

SecLists

SecLists は、セキュリティ テスターの究極の相棒です。これは、セキュリティ評価中に頻繁に使用されるさまざまな種類のリストを 1 か所にまとめたものです。 SecLists は、セキュリティ テスターが必要とする可能性のあるすべてのリストを便利に提供することで、セキュリティ テストをより効率的かつ生産的にするのに役立ちます。リストの種類には、ユーザー名、パスワード、URL、ファジング ペイロード、機密データ パターン、Web シェルなどが含まれます。テスターはこのリポジトリを新しいテスト マシンにプルするだけで、必要なあらゆる種類のリストにアクセスできるようになります。

SublimeText3 中国語版

SublimeText3 中国語版

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

mPDF

mPDF

mPDF は、UTF-8 でエンコードされた HTML から PDF ファイルを生成できる PHP ライブラリです。オリジナルの作者である Ian Back は、Web サイトから「オンザフライ」で PDF ファイルを出力し、さまざまな言語を処理するために mPDF を作成しました。 HTML2FPDF などのオリジナルのスクリプトよりも遅く、Unicode フォントを使用すると生成されるファイルが大きくなりますが、CSS スタイルなどをサポートし、多くの機能強化が施されています。 RTL (アラビア語とヘブライ語) や CJK (中国語、日本語、韓国語) を含むほぼすべての言語をサポートします。ネストされたブロックレベル要素 (P、DIV など) をサポートします。