コード 1 に示すように:
(図1)、単純な3層構造のタイミング図
3 層構造の呼び出しシーケンスは、コードとタイミング図から直感的に見ることができます。しかし、実際の開発では、この単純な 3 層構造ではニーズを満たすことができません。外観層と中間サービス層のコードから始めましょう。 外観レイヤーLWordHomePageクラスで、newキーワードを直接使用して、ハードコードされたメソッドである中間サービスクラスLWordServiceCoreを作成して呼び出します。 実際のプロジェクト開発プロセスでは、外観層と中間サービス層が別の人によって開発される場合があります。つまり、1つの機能モジュールが複数の人によって完成されます。外観層の 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 コードを変更します:
技術記事
コード 1 に示すように、次のようにコードをコピーします。 // コード 1 // 外観層クラス class LWordHomePage { // メッセージを追加します public function append($newLWord) { // 中間サービス層を呼び出します $serv =...