層の分割線の正しい数は、ウェブサイトがデータモデルにどれだけ厳密に従っているか、データベースでどれだけの重労働が行われるかなどに大きく依存します. ですから、答えるのは難しいです。
多くの人が十分な/多すぎる層を持っているかどうかを心配することに多くの時間を費やしていますが、残念ながら他の多くの人々は、他の人から指示された層を回避しようとして多くの時間を費やしています.
この質問に本当に答えるには、いくつかのことを考える必要があります
- 現在のアプリの規模 (ユーザー数は 5 人ですか、それとも 50,000 人ですか)
- アプリのスケーリング (アップグレードする前に 5,000,000 ユーザーに到達する可能性はどれくらいありますか)
- 書き直さずにアプリのセクション全体を完全に削除する可能性がある頻度 (つまり、ビジネス ルールを完全に変更しましたが、奇跡的に、この背後で反対のことを行うことができる限り、UI は正しいままです)インターフェース)
- ストレージまたはデータベース インフラストラクチャを現実的に完全に変更する頻度 (.net 開発者として、ある日起きたばかりで DMBS を切り替えることを決定した多くのショップに行ったことはありませんが、多くのマネージャーに主張してもらいました) linq2sqlまたはEFを使用するのではなく、時間の経過とともに工数に数万の費用がかかる「念のため」の抽象化層で)
- 層の 1 つに、Web UI リソースの帯域外であるべき本質的に苦痛なものが含まれていますか (画像やオフィス ドキュメントの処理は、オーバーヘッド/不安定性を分離するためだけにサービスに移行する 2 つの良い例です)。
私は、これらのことが決して起こらないことを暗示しようとしているわけではありませんが、確かに起こりますが、多くのビジネスラインの多くの開発者にとって、理論があなたに信じさせるほどには起こりません.
このようなものの多くは、アプリの他の部分を書き直さない限り、現実的に置き換えることができないものから階層を作成しないことに帰着します。残りは、適切に設計されたものから時期尚早の最適化まで、どこで一線を越えるかを推測することになります。
IMHO - シリアライゼーションとエンコーディングのペナルティだけでは、Web アプリが常に同じサーバーで実行される場合は、UI を書くことはありません。後でサービスを別の場所にスケーリングするという理論上の必要性で最初にこれを行っている場合、その動機は理解できますが、キャッシュされたデータの有効期限やトランザクションなど、他の問題がいくつかあり、すべてを実際に実行する必要がある場合、これを依然として厄介な選択にすることがよくありますWCF サービスを介して。フィールドを追加するために変更しなければならないことの数が 3 倍になり、リレーショナル データベースを使用する多くの機能を利用できなくなります。
編集
OPは、WCFサービスが複数のフロントエンドの背後にあるため、サービスが常にUIと同じホスト上にあるとは限らないとコメントしました。MVC アプリにデータ オプションを追加して JsonResults などを返す場合は、MVC を使用して残りのエンドポイントを返し、メインの Web UI をバックエンドに完全に接続したままにするオプションがまだあります。