3

多層 SOA アプリケーションと 100 を超えるテーブルを持つデータベースがあります。すべての CRUD 操作を処理するデータ層にエンティティ フレームワークを使用しています。

サービスでホストされている 1 つのファサード クラスがあり、クライアント アプリ全体で呼び出すことができます。

このファサード クラスには、次のようなメソッドが含まれています。

private void DoSomething()
{
  //insert to table1
  //insert to table 2
  //delete from table 3
  //more CRUD operations
}

また、ファサード クラスは基本的に、DoSomething() に似た他のメソッドの負荷でいっぱいです。

したがって、クライアントは基本的にファサード クラスのインスタンスを作成し、これらすべてのメソッドにアクセスできます。

私の質問は、これがファサード パターンのベスト プラクティスであるかということです。ファサード クラスが「重すぎる」と感じており、アプリケーションの規模が大きくなった場合にパフォーマンスに影響するかどうかはわかりません。

大量のメソッドが含まれている場合、ファサード クラスのインスタンスの作成は非常にコストのかかる操作になりますか?

4

2 に答える 2

3

Facadeは、サブシステムをオブジェクトとしてカプセル化し、すべてのビジネスオブジェクトとサービスの集約されたインターフェイスをクライアントに提供すると、SOAアーキテクチャに非常に適しています。また、アーキテクチャの結合を減らします。あなたのアプローチは重くなく、システムのスケーラビリティに影響を与えないと思います。

于 2012-10-05T03:13:53.767 に答える
0

大量のメソッドが含まれている場合、ファサード クラスのインスタンスの作成は非常にコストのかかる操作になりますか?

これらのメソッドが構築中に呼び出されないと仮定すると、オブジェクトの「重み」に影響を与えないはずです。私の理解では、何もしていないメソッドは、実用的な目的でメモリやサイクルを消費しません。

(補足として、質問に価値を追加しない技術的な制限があります。C#クラスに使用できるメソッドの数を参照してください)

あなたのファサードをあなたのために働かせてください!他の人に渡すことを想定して、「これは私の API の機能がきちんと説明されているか?」と尋ねることをお勧めします。60 は私の個人的な好みの上限に達しているように聞こえますが、それでも 15 オブジェクトの CRUD にすぎません。

ファサードは、より簡潔で洗練されたサービスを自由に作成できる統一されたインターフェースと考えてください (これにより、さらに簡潔なリポジトリがカプセル化され、さらに簡潔なデータのレコードがテーブルにカプセル化され、BLOB がバケットにカプセル化されます)。 .

于 2012-10-06T21:08:28.903 に答える