ホームページ  >  記事  >  バックエンド開発  >  PHPの3層構造(その1) 簡単な3層構造_PHPチュートリアル

PHPの3層構造(その1) 簡単な3層構造_PHPチュートリアル

WBOY
WBOYオリジナル
2016-07-21 15:36:27952ブラウズ

コード 1 に示すように:

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

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

PHPの3層構造(その1) 簡単な3層構造_PHPチュートリアル

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

3 層構造の呼び出しシーケンスは、コードとタイミング図から直感的に見ることができます。しかし、実際の開発では、この単純な 3 層構造ではニーズを満たすことができません。外観層と中間サービス層のコードから始めましょう。 外観レイヤーLWordHomePageクラスで、newキーワードを直接使用して、ハードコードされたメソッドである中間サービスクラスLWordServiceCoreを作成して呼び出します。 実際のプロジェクト開発プロセスでは、外観層と中間サービス層が別の人によって開発される場合があります。つまり、1つの機能モジュールが複数の人によって完成されます。外観層の LWordHomePage クラスの開発進捗は、LWordServiceCore クラスが完全に開発されるまで待つことができません (つまり、外観層は、中間のサービス層が完全に開発されるまで開始することができません)。この種のコラボレーション効率は非常に低いです。 複数の人が同時にプロジェクトを開発できるようにするには、コード設計をカットする必要があります。アピアランス層の開発進捗に合わせて、一時的な中間サービスクラスを編成することも可能です。中間サービス層が完全に開発されたら、それを置き換えるだけです...図 2 に示すように:

PHPの3層構造(その1) 簡単な3層構造_PHPチュートリアル

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

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


PHPの3層構造(その1) 簡単な3層構造_PHPチュートリアル

(図 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 インターフェイスを操作していることに注意してください
}
}; Interface ILWordService {
public function append($newLWord)
};

// サービス ファクトリ クラス
class MyServiceFactory {
// メッセージ サービスの作成
public static function create() {
if (1) {
// Return中間サービス層へ
return new LWordServiceCore(); else {
// 一時的な実装を返す
return new TempService();
}
}

// 一時的なサービス クラス
class TempService を実装する {
/ / メッセージの追加
public function append ($newLWord) {
// 一時コード (省略)
}
};

// 中間サービス層
class LWordServiceCoreimplements ILWordService {
// メッセージの追加
public function append($newLWord) ) {
// データ アクセス レイヤー
$dbTask = new LWordDBTask();
$dbTask->append($newLWord)
}
};メッセージ
public function append($ newLWord) {
// データ層コード (省略)
}
};
タイミング図を図 4 に示します:






(図4) ファクトリクラスを通じてメッセージサービスを作成する



http://www.bkjia.com/PHPjc/322087.html
www.bkjia.com

本当

http://www.bkjia.com/PHPjc/322087.html

PHPの3層構造(その1) 簡単な3層構造_PHPチュートリアル技術記事

コード 1 に示すように、次のようにコードをコピーします。 // コード 1 // 外観層クラス class LWordHomePage { // メッセージを追加します public function append($newLWord) { // 中間サービス層を呼び出します $serv =...

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