2

以前、私のASP.NETWebアプリケーションはADO.NETを使用してデータベースに直接接続していました。次に、ASP.NETレイヤー、ミドルWebサービスレイヤー、バックエンドデータベースレイヤーの3つのレイヤーに変更します。データソースをASP.NETフロントレイヤーに抽象化し、緩く結合し、潜在的なセキュリティリスクを減らして、外部に公開されたASP.NetWebアプリケーションがデータベースに直接アクセスできるようにするなどの利点があると思います。

2層アーキテクチャと3層アーキテクチャを比較すると、2つの大きな問題が発生しました。

  1. 追加の中間Webサービスレイヤーでは、より多くのトラフィックが発生します。たとえば、ASP.NETはデータベースと直接通信しませんが、Webサービスと通信し、Webサービスがデータベースと通信すると、より多くのトラフィックが発生します。ボトルネックになりますか?ボトルネックの場合、この問題を解決するための一般的なアドバイスはありますか?

  2. ASP.NETはデータベースに接続できませんが、Webサービスに接続できるため、DataSet/DataTableオブジェクトを簡単に取得できません。テーブルフォームデータをデータバインドされたコントロールに提示することが難しくなります。ASP.NETのプレゼンテーション層のコーディングを容易にするためのアイデアはありますか?

よろしく、
ジョージ

4

3 に答える 3

8

利益があると思うだけなら、それをすべきではありません。あなたは、パフォーマンス、コードの単純さ、およびアーキテクチャの単純さを犠牲にして、大量の複雑さを追加し、自分で作業することについて話している...何のために?これらのコストに見合うだけの利益はありますか?

あなたは:

  • Webフロントエンドをデータベースサーバーから切断する必要がある緊急のセキュリティ関連のニーズがあります(いいえ、「これはより安全だと思います」という仮説ではありませんが、どのDB権限を賢くすることによって解決できない、実証可能で具体的なセキュリティの問題です。 ASP.NETアプリケーションを付与します)

  • 将来のある時点で(おそらく繰り返し)データ層を完全に交換することを期待しているので、WebコードベースをDBの根本的な変更から隔離する必要がありますか?

ほとんどすべての場合、これらに対する答えはノーです。これを行うと、自分自身とこのアプリに触れる可能性のある他の人に苦痛を与えるだけです。

于 2009-02-09T03:18:57.523 に答える
1

質問 2 については、Web サービスから DataSet を確実に返すことができます。http://tinyurl.com/ah58xc

ただし、アプリケーションを多層化するのではなく、単純にリファクタリングする方がよいかもしれません。たとえば、"データ アクセス" を、ASP.NET プロジェクトから参照する別のクラス ライブラリ プロジェクトに分けます。これにより、物事がより整理され、多層アーキテクチャでやりたいことの一部が達成される可能性があります。

ところで、複数の層を必ずしも必要としない場合に作成する際の最大の危険は、適切な用語がないために「プロキシ」コードを作成してしまうことです。つまり、同じパラメーターを使用して「実際の」バックエンド メソッドを呼び出す以外の目的を果たさないメソッドです。これは、レイヤーの分離がきれいであるため、最初は気分が良くなりますが、後でメンテナンスの問題につながります。たとえば、メソッドにパラメーターを追加するには、3回追加する必要があるためです(バックエンド、プロキシレイヤー、およびプレゼンテーション層)。

于 2009-02-09T03:38:56.443 に答える
0

私の最初の質問は、なぜ中間に W​​eb サービスがあるのか​​ということです。これがすべて同じ物理マシンで実行される場合は、一連のインターフェイスを介して直接メソッド呼び出しを使用して使用される中間層をリファクタリングすることをお勧めします。

私は、中間層の Web サービスと分離されたアーキテクチャに取り組んでいますが、これには会社の重要なビジネス ロジックがすべて含まれており、インターネットに直接公開されることはありません。何かのようなもの:

{インターネット} -> |DMZ| -> Web サーバー -> |ファイアウォール LAN| -> アプリサーバー -> データベースサーバー

その場合、ミッションクリティカルなものはDMZにないので、セキュリティの層が追加されると思います. 確かに、Web サーバーはアプリ サーバーに接続できるため、技術的にはいくつかのセキュリティ問題に違反していますが、アプリ サーバーを単一のポートを介して DMZ 内の特定の IP に公開することは、インターネットに公開するよりも優れています。

サーバー間の通信に WCF を使用する場合は、SOAP ではなく、TCP を介したバイナリ シリアル化などを使用することをお勧めします。その方がパフォーマンスが向上するはずです (気軽に簡単なテストを設定してください)。自分で試したことはありませんが、WCF はデータセットまたはテーブルをネットワーク経由でシリアル化できる可能性があります。ここを参照してください。

于 2009-02-09T03:44:22.500 に答える