n-tierはあなたにとって何を意味しますか?
-
19-08-2019 - |
質問
n層システムの開発における層を構成するものについて、開発者ごとに異なる基準があることに長年気づいているので、stackoverflowでのコンセンサスについては興味がありました。
別の論理層を別の層と呼ぶのに十分ですか、それを別の層と呼ぶために別のサーバー(物理または仮想)にデプロイできる必要がありますか?
質問の言い回しを少し変えてみましょう。呼び出しメカニズムがプロセス、スレッドローカル、またはアパートメントローカルのみである場合、クラスをライブラリまたはパッケージに編成する方法に応じて2つの異なる層であると主張することは可能ですか?
解決
私にとって、物理層とは、異なる物理マシンで実行されるように設計された システムの一部を意味します。はい、db接続文字列をいつでも別のサーバーに向けることができますが、DALがあまりにもおしゃべりで、n + 1と無制限のレコードセットの問題がある場合、ネットワークレイテンシはあなたを本当に速く殺します。
一方、論理層は、関心の分離、結合、結合の美徳をサポートします。厳密には、別のアセンブリにある必要さえありません-名前空間がトリックを行います。行うべきではないことがわかっているクラスを呼び出さないでください。NDependが役立ちます。他のヒント
別の論理層は、それを層と呼ぶのに十分です。必ずしも別個のサーバー上にある必要はありませんが、他のレイヤーからの定義された分離は確かにそれを可能にします。
例として、単一のサーバーで実行する3層システム(db、dll、aspページ)と呼ばれるものを使用していました。一部の定義では、これは単一層システムです。これで、データベースが別のサーバーで実行され、必要な変更は接続文字列だけでしたが、これは2層ソリューションになりますか?
だからこそ、ティアの概念は、実際に行う必要があるというよりも、別のマシンで実行する能力に関するものだと感じています。私にはもっと一貫しているようです。
層と層の概念は しばしば同じ意味で使用されます。しかしながら、 かなり一般的な視点は 確かに違いがあること、そして レイヤーは論理的な構造化であること 作る要素のメカニズム 層ながら、ソフトウェアソリューションを 物理的な構造化メカニズムです システムインフラストラクチャ用
参照。
レイヤーは、カップリングを最小化するメカニズムです。彼らは論理的です。層は、パフォーマンスを最大化するか、セキュリティリスクを無効にするように設計されています。彼らは物理的です。それらは本当に同じではなく、なぜ人々がそれらを同じ意味で使用しようとするのか分かりません。
Webアプリケーションの大部分は、デフォルトで3層です(ブラウザー、Webサーバー、データベースサーバー)。イントラネットアプリの大部分は2層(クライアント、dbサーバー)です。ただし、どちらの場合でも、UIレイヤー、ビジネスレイヤー、およびデータレイヤーを作成します。懸念事項が分離されており、保守性のためにコードを構成するのに役立ちます。また、いずれの場合も、通常はすべてを1つのボックスに展開します。 Webサーバーまたはクライアントワークステーション。そのため、レイヤーとティアは一致しません。
ティアは、アーキテクチャ、つまりマシンの物理的な分離であると常に信じていました。 これらの人たちは最近同じことを考えており、とても良い本だと思いました。
しかし、他の回答を読んだ後、よく考えてでGarryに同意しますそれ。
iはGarry Shutlerに同意しますが、多くの層が単一のプロセス/スレッドまたは同じアセンブリに存在する可能性があることを追加します。物理的(ハードウェア、実行可能分離、またはバイナリ分離)分離よりも重要なのは、開発者向けコードのレイアウト(IMHO)です。 aspnetアプリの場合と同じように、同じ1つのdllに、データアクセス、ドメイン、プレゼンテーションの3つの層すべてを含めることができます。
定義を打ち出す必要があると言わざるを得ないでしょう。私は通常、階層を機能と責任の論理的な分離、レイヤーを物理的な分離の要件または能力と考えています。一部の層には複数の層があり、一部の層は層にまたがる場合があります。通常、必要に応じて、および/または設定によって必要に応じて物理的に分離する機能を持つサービスレイヤー層を使用します。
したがって、質問/コメントをフォローアップしてください。データベースのストアドプロシージャに多数のロジック(ビジネスまたはその他)がある場合、それも層と見なすべきですか? Service Broker for Microsoft SQL Serverなどのデータベースエンジンの機能を利用している場合はどうなりますか?これは、2つの層自体があると見なすことができます。
また、バックグラウンドサービスやデーモンは別の層や層ですか、それとも既存のものに属しますか?
用語の履歴を見てください<!> quot; tier <!> quot;コンピューティングで。デスクトップ/ミニ/メインフレームでの1層コンピューティングは誰も言いませんでした。クライアント/サーバー時代に2層コンピューティングを言った人はいませんでした。 3層は、クライアントサーバーとその間のミドルウェア(メッセージ指向ミドルウェアとトランザクションブローカー)のアーキテクチャ上のモニカになりました。 n-tierは別の用語<!> quot; EAI-またはEnterprise Architecture Integration <!> quot;とともに普及したと思います。ほとんどのベンダー実装がプロプライエタリで、標準ベースだが非常に高価であるか、またはその両方であったことを除いて、それはサービス指向アーキテクチャとまったく同じ考えでした。 XML-RPC、SOAP、およびRESTが登場した後、彼らはそれを<!> quot; Web Services <!> quot;と呼びます。そして、その背後にあるEAIの原則を適用して、SOA-サービス指向アーキテクチャとエンタープライズサービスバスを考え出します。
私のポイントは、これらの用語はいずれも物理的な分離を意味しないということです...それは常に機能の論理的な分離に関するものでした。これらの論理アプリケーション層の多くがステートレスになるように設計されているため、水平スケーラビリティのために物理的に分離することができました。